Lee*_*Lee 0 inheritance activerecord ruby-on-rails super destroy
我有一个继承自ActiveRecord :: Base的Commentable类和一个继承自Commentables的Event类.
我已经覆盖了这两个类中的destroy方法,并且Event.distroy调用了super.然而,一些意外的事情发生了.具体而言,将删除事件的has_and_belongs_to_many关联.我认为这种情况正在发生,因为一些模块被包含在Commentables和Event类之间,但不确定是否有办法阻止它.
这是简化的代码:
class Commentable < ActiveRecord::Base
has_many :comments
def destroy
comments.destroy_all
self.deleted = true
self.save!
end
end
class Event < Commentable
has_and_belongs_to_many :practitioners, :foreign_key => "commentable_id"
def destroy
#some Event specific code
super
end
end
Run Code Online (Sandbox Code Playgroud)
我不想从数据库中删除行,只需设置一个"已删除"标志.我也不想删除任何关联.但是,在Event.destroy和Commentable.destroy之间的某处,其他一些rails代码会破坏has_and_belongs_to_many表中的记录.
知道为什么会这样,以及如何阻止它?
你实际上不必在Commentable模型上覆盖destroy ,只需添加一个before_destroy返回false实际取消destroy调用的回调.例如:
class Commentable < ActiveRecord::Base
# ... some code ...
before_destroy { |record|
comments.destroy_all
self.deleted = true
self.save!
false
}
# ... some code ...
end
Run Code Online (Sandbox Code Playgroud)
这同样适用于Event模型; 只需添加一个回调而不覆盖destroy方法本身.
有关可用回调的更多信息,请点击此处.
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |