与after_add
关联has_and_belongs_to_many
回调是否有任何回调或解决方法来获取belongs_to关联的after_add功能。
一个解决方法是在保存回调和脏对象功能之后使用。
belongs_to :video
after_save :after_save_task
def after_save_task
do_stuff if video_id_changed?
end
def do_stuff
### do stuff
end
但是我在do_stuff中不能save(true)
,因为它进入了无限循环。
答案 0 :(得分:0)
看起来还没有添加为has_on和belongs_to添加回调的功能。看到这个帖子https://github.com/rails/rails/issues/586
针对您的特定问题的一个脏解决方案是添加一些脏属性以建议是否已进行更新。
像这样belongs_to :video
after_save :after_save_task
attr_accessor :stuff_done
def after_save_task
do_stuff if video_id_changed? && !stuff_done
end
def do_stuff
stuff_done = true
### do stuff
## Saving record here would be fine.
end
这真的是一个黑客,可能存在一些更好的解决方案。
答案 1 :(得分:0)
覆盖setter方法怎么样? Rails指南的考试范围为this here
摘录状态
覆盖生成的方法
关联方法在包含的模块中生成 模型类,它允许您轻松覆盖自己的 方法并用super调用原始生成的方法。对于 例如:
class Car < ActiveRecord::Base belongs_to :owner belongs_to
:old_owner
def owner=(new_owner)
self.old_owner = self.owner
super
end
end
如果您的模型类是Project,则命名该模块 项目:: GeneratedAssociationMethods。 GeneratedAssociationMethods 模块类包含在模型类之后 (匿名)生成属性方法模块,意思是 关联将覆盖具有相同属性的方法 名。
我很欣赏这是一个老问题,但我偶然发现它寻找类似的解决方案