Cha*_*nya 3 callback ruby-on-rails-3.1
我使用PostgreSql作为数据库和Rails 3.1.3和ruby 1.9.3我有3个模型.
Activity ActivityObjectActivityObjectActivity他们是这样联系的.
活动
has_many:activity_object_activities,:dependent =>:destroy
has_many:activity_objects,:through =>:activity_object_activitiesafter_destroy:do_something_on_activity_object_related
ActivityObject
has_many:activity_object_activities,:dependent =>:destroy
has_many:activities,:through =>:activity_object_activities
ActivityObjectActivity
belongs_to:activity,:dependent =>:destroy
belongs_to:activity_object
当我做了对的活动破坏,我观察activity_object_activities表项的调用之前得到删除do_something_on_activity_object_related因dependent: destroy.因此,当do_something_on_activity_object_related活动被销毁时调用方法时,它无法找到activity_object与活动相关联的方法.
有没有一种方法可以do_something_on_activity_object_related在与活动相关的关联被销毁之前调用它.有什么方法可以改变after_destroy回调的顺序.
提前致谢.
您可以自己负责地删除/销毁依赖项,并确保在完成后触发它们 do_something_on_activity_object_related
而不是
has_many :activity_object_activities,:dependent => :destroy
has_many :activity_objects, :through => :activity_object_activities
after_destroy :do_something_on_activity_object_related
Run Code Online (Sandbox Code Playgroud)
做这个:
has_many :activity_object_activities
has_many :activity_objects, :through => :activity_object_activities
after_destroy do
do_something_on_activity_object_related
ActivityObjectActivity.destroy_all(activity_id: self.id)
end
Run Code Online (Sandbox Code Playgroud)
从联接表中删除项目时,您应该使用delete_all而不是destroy_all.但你在你的例子中使用了破坏,我也在这里使用它.