首页 > 解决方案 > 无法更新验证方法中的属性 - Rails

问题描述

对活动记录还不太满意

我想知道是否可以像这样从另一个更新模型属性:

validate :check_if_exist?

def check_if_exist?
    events = Event.where(kind: kind, starts_at: starts_at..ends_at).or(Event.where(kind: kind, ends_at: starts_at..ends_at))
    unless events.count == 0
        events[0].update_attribute(:starts_at, starts_at)
        events[0].update_attribute(:ends_at, ends_at)
        errors.add(:base, "Event ID##{events[0].id} updated")
        return false
    end
end

完全不确定我是否在好的路上,但是当我正在寻找更新模型而不是像这样创建时我找不到任何结果。

标签: ruby-on-railsactiverecord

解决方案


使用first_or_initialize

event = Event.where(kind: kind, starts_at: starts_at..ends_at).or(Event.where(kind: kind, ends_at: starts_at..ends_at)).first_or_initialize
event.update(starts_at: starts_at, ends_at: ends_at)

推荐阅读