对活动记录还不太满意
我想知道是否可以从另一个这样的模型中更新模型属性:
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
完全不确定我是否处于良好状态,但是当我寻找更新模型而不是像这样创建模型时,我找不到任何结果。
答案 0 :(得分:1)
您不应该在验证中更新模型。假设这是在Event模型上,这可能就是您想要的。
class Event < ApplicationRecord
attr_accessor :flash_notice
before_create :terminate_existing
def terminate_existing
existing = Event.find_by(kind: kind, starts_at: starts_at..ends_at).or(find_by.where(kind: kind, ends_at: starts_at..ends_at))
existing.update(starts_at: starts_at, ends_at: ends_at)
flash_notice = "Event ID# #{existing.id} updated"
end
end
after_action :flash_notice, only: :create
def flash_notice
unless @event.flash_notice.blank?
flash[:notice] = @event.flash_notice
end
end
答案 1 :(得分:1)
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)