我尝试了很多方法来覆盖 :destroy 方法的行为,但没有任何效果。我首先使用了 acts_as_paranoia 插件,但它不适用于 has_many :through 关联中的模型。
我想覆盖 :destroy 方法只是为了做这样的事情:
def destroy
_run_destroy_callbacks { delete }
end
def delete
self.update_attribute(:status => 0)
freeze
end
也就是说,我只想更新另一个字段(状态为0)而不是销毁记录本身。
你有没有尝试过?:
class MyClass < ActiveRecord::Base
def destroy
update_attribute(:status, 0)
end
end
编辑:根据评论,可能还有其他东西在起作用,它可能只是关联定义上的 (:dependent=>'') 指定——或者如果它是 HABTM,它可能根本不起作用。或许有关通过关联删除和销毁的信息 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html有帮助吗?粘贴相关部分如下:
删除还是销毁?
has_many 和 has_and_belongs_to_many 关联具有以下方法
销毁、删除、destroy_all 和delete_all。
对于 has_and_belongs_to_many 来说,删除和销毁是相同的:它们
导致连接表中的记录被删除。
对于has_many,destroy总是会调用has_many的destroy方法
记录被删除以便运行回调。但是删除会
要么按照指定的策略进行删除
:dependent 选项,或者如果没有给出 :dependent 选项,那么它将
遵循默认策略。默认策略是 :nullify (设置
外键为零),除了 has_many :through ,其中默认值
策略是delete_all(删除连接记录,而不运行它们
回调)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)