我没有用changes
的方法。但我敢肯定,你总是可以用魔术方法<attribute_name>_changed?
和<attribute_name>_was
:
services.any? {|s| s.attribute_name_changed?}
services.map(&:attribute_name_was)
见瑞恩·贝茨的railscast了解更多信息:#109 episode
UPDATE:你可以通过:after_delete
和:after_add
回调has_many
直接关联:
has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2
Be car充分利用这些回调并注意它们的工作方式。他们 被称为items.build
和items.create
一旦。所以,如果你 items.build
然后保存父对象(嵌套属性为 例如)after_add
回调将建设 关联对象只能调用一次。这意味着,如果父母有验证,那么内置的items
将不会保存在数据库中,您不能依靠after_add
回调。换句话说,它并没有说在数据库中保存了添加的关联记录。因此,您必须保证该物品仅在呼叫items.create
上添加和保存。我希望你了解这个澄清。
对我来说,这只适用于,如果关联的对象更新。如果添加或删除了关联的对象,它就不适用于我(因为它不再存在于“服务”关联中)。我究竟做错了什么? – morgler 2017-03-15 14:13:35