如何在rails中的模型中构造正确的before_destroy

时间:2013-10-28 19:38:43

标签: mysql ruby-on-rails ruby-on-rails-3.2

我有以下内容删除了一个bin以及与之相关的所有内容。这很棒,功能很好;

MODEL BIN

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

然而,它会破坏一个bin,删除所有但不运行的东西:mod_newtweets来更新我的另一个表及其列。

如果我把它放在控制器中它可以正常工作;

Newtweet.where(:tweet_id => @bin.savedtweets.pluck(:tweet_id)).update_all(:status => 'new')

我以为我已经做好了一切。

1 个答案:

答案 0 :(得分:1)

用以下方法替换您的方法:

def mod_newtweets
    Newtweet.where(:tweet_id => savedtweets.pluck(:tweet_id)).update_all(:status => 'new')
end

您在模型中使用@bin.savedtweets但未在任何地方定义@bin。因为它是一个实例方法,您可以使用self.savedtweets或仅savedtweets来调用Bin模型的当前实例上的savedtweets方法。