我有以下内容,它删除了一个垃圾箱以及与其相关的所有内容。它很棒而且功能齐全;
型号箱
class Bin < ActiveRecord::Base
has_many :savedtweets, :dependent => :destroy
before_destroy :mod_newtweets
def mod_newtweets
Newtweet.where(:tweet_id => @bin.savedtweets.pluck(:tweet_id)).update_all(:status => 'new')
end
end
但是,它会破坏一个垃圾箱,删除所有内容,但不会运行 :mod_newtweets 来更新我的其他表及其列。
如果我将其放入 Controller 中,它就可以正常工作;
Newtweet.where(:tweet_id => @bin.savedtweets.pluck(:tweet_id)).update_all(:status => 'new')
我以为我已经把一切都做好了。
最佳答案
将您的方法替换为:
def mod_newtweets
Newtweet.where(:tweet_id => savedtweets.pluck(:tweet_id)).update_all(:status => 'new')
end
您在模型中使用了@bin.savedtweets
,但尚未在任何地方定义@bin。由于它是一个实例方法,您可以使用 self.savedtweets 或仅使用 savedtweets 来调用 Bin 模型当前实例上的 savingtweets 方法。
关于mysql - 如何在 Rails 模型中构建正确的 before_destroy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643615/