回拨belongs_to关联rails

时间:2015-03-13 19:17:26

标签: ruby-on-rails-4 associations belongs-to

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),因为它进入了无限循环。

2 个答案:

答案 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   模块类包含在模型类之后   (匿名)生成属性方法模块,意思是   关联将覆盖具有相同属性的方法   名。

我很欣赏这是一个老问题,但我偶然发现它寻找类似的解决方案