检查'创建'并且'更新' - 积极记录

时间:2017-12-30 18:40:05

标签: ruby-on-rails ruby activerecord

我试图使用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

这个逻辑没有意义,因为如果笔记可以存在,那很好。不过,我只想进入此块,如果在更新时添加了新注释或创建...

1 个答案:

答案 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