相关疑难解决方法(0)

如何避免运行ActiveRecord回调?

我有一些具有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)

我找不到该方法的记录,但似乎有效.

ruby ruby-on-rails rails-activerecord

137
推荐指数
10
解决办法
10万
查看次数

如何在不运行Rails中的回调的情况下保存模型

我需要在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

24
推荐指数
6
解决办法
4万
查看次数