我试图使用AR回调(after_save)来检查是否在最新的更新中添加了一个关联'或者'创建'。但是,我似乎无法找到正确的方法。
class Submission < ActiveRecord
has_many :notes, inverse_of: :submission, dependent: :destroy
accepts_nested_attributes_for :notes, :reject_if => proc { |attributes| attributes['message'].blank? }, allow_destroy: true
end
这是我的after_save
after_save :build_conversation
在我想看的方法中,如果在更新时添加了新的记事表或创建...
def build_conversation
if self.notes.any?
binding.pry
end
end
这个逻辑没有意义,因为如果笔记可以存在,那很好。不过,我只想进入此块,如果在更新时添加了新注释或创建...
答案 0 :(得分:1)
结帐this post。基本上,您在模型中添加include ActiveModel::Dirty
,然后在after_change
回调中添加if_notes_changed
。此方法是使用method_missing
定义的,例如,如果您有name
列,则可以使用if_name_changed
,依此类推。如果您需要比较旧值和新值,可以使用previous_changes。
或者,您可以像这样使用around_save
:
around_save :build_conversation
def build_conversation
old_notes = notes.to_a # the self in self.notes is unnecessary
yield # important - runs the save
new_notes = notes.to_a
# binding.pry
end