我有一些具有after_save回调的模型.通常这很好,但在某些情况下,比如在创建开发数据时,我想保存模型而不运行回调.有一个简单的方法吗?类似于......的东西
Person#save( :run_callbacks => false )
Run Code Online (Sandbox Code Playgroud)
要么
Person#save_without_callbacks
Run Code Online (Sandbox Code Playgroud)
我查看了Rails文档但没有找到任何内容.但是根据我的经验,Rails文档并不总是讲述整个故事.
UPDATE
我发现了一篇博文,解释了如何从这样的模型中删除回调:
Foo.after_save.clear
Run Code Online (Sandbox Code Playgroud)
我找不到该方法的记录,但似乎有效.
我需要在Rails中保存模型时计算值.所以我称之为calculate_averages一个Survey类的回调:
before_save :calculate_averages
Run Code Online (Sandbox Code Playgroud)
但是,偶尔(最初我有10k记录需要此操作)我需要手动更新每条记录的所有平均值.没问题,我有以下代码:
Survey.all.each do |survey|
survey.some_average = (survey.some_value + survey.some_other_value) / 2.to_f
#and some more averages...
survey.save!
end
Run Code Online (Sandbox Code Playgroud)
在运行这段代码之前,我担心calculate_averages它会被调用并复制它,甚至可能会导致我正在做的事情出现问题.好吧,那么我想,好吧,我只是什么也不做,让我们calculate_averages打电话来做它的事.问题是,首先,即使您没有对记录进行任何更改,有没有办法强制回调被调用?
其次,平均的方式计算这是远远更有效率根本就没有让回调被调用的一切,做的一切平均值的一次.这可能不会让回调被调用吗?
activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-activerecord