Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3有很多变化吗?_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord_Has Many - Fatal编程技术网

Ruby on rails Rails 3有很多变化吗?

Ruby on rails Rails 3有很多变化吗?,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,has-many,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Has Many,我需要跟踪如下设置的关联的更改(添加和删除): has_many :listing_services has_many :services, through: :listing_services 对于普通属性,最简单的方法是在保存前检查l.changes[属性],或在保存后检查中的l.changes[属性] 问题是,对于有许多属性的来说,最好的方法是什么?我没有使用更改方法。但我相信你总是可以使用神奇的方法 更新:您可以在删除后传递,:在添加回调到后直接关联多个: has_many :item

我需要跟踪如下设置的关联的更改(添加和删除):

has_many :listing_services
has_many :services, through: :listing_services
对于普通属性,最简单的方法是在保存前检查
l.changes[属性]
,或在保存后检查
中的
l.changes[属性]


问题是,对于有许多属性的
来说,最好的方法是什么?

我没有使用
更改
方法。但我相信你总是可以使用神奇的方法

更新:您可以在删除后传递
:在添加
回调到
后直接关联多个

has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2
使用这些回调时要小心,并注意它们是如何工作的。它们 对
项调用。生成
项。创建
一次。所以如果你打电话
项。生成
,然后保存父对象(具有用于 示例)
after\u add
回调将在构建时仅调用一次
关联对象。这意味着,如果父项具有验证,则生成的
将不会保存在数据库中,并且您不能依赖添加后的
回调。换句话说,它并没有说添加的关联的记录保存在数据库中。因此,您必须保证项目仅在呼叫时添加和保存
项目。创建
。我希望您能理解这一澄清。

对于我来说,这只适用于更新关联对象的情况。如果添加或删除了关联的对象(从那时起,
services
关联中不再存在该对象),则它对我不起作用。我做错了什么?
has_many :items, :after_add => :my_method_or_proc1, :after_remove => :my_method_or_proc2