1

そのため、テーブル内の 50,000 以上のレコードすべて (実際にはいくつかありますが、ここではすべて同じ操作であるため、ここでは 1 つだけに対処します) に対して少しのロジックを実行し、ブール値のインジケーターをマークしています。

ActiveRecord::Base.silence do
  CoreRevenue.where('core_revenues_usd IS NOT NULL').each do |c|
    c.ok = true
    c.save
  end
end

お気づきかもしれませんが、私はすでにデータベースが多数の SQL 応答をコンソールに出力するのを「停止」していますが、操作の最後には常に大きな配列ダンプがあり、5 ~ 10 時間かかることがあります。秒。

操作が完了した後、xどこにダンプされるのを止めることができるかどうか疑問に思っています。x = CoreRevenue.where('core_revenues_usd IS NOT NULL')ありがとう。

同様に「エキサイティング」は、ある種のラムダ計算の計算のためにこれが不可能な理由を説明する答えになるでしょう。

4

2 に答える 2

5

ブロックが戻るのを防ぐことはできませんが、代わりに別のものを返すことができます:

ActiveRecord::Base.silence do
  CoreRevenue.where('core_revenues_usd IS NOT NULL').each do |c|
    c.ok = true
    c.save
  end

  nil
end
于 2013-03-02T20:52:55.327 に答える
2

私はそれをこのように書くでしょう:

CoreRevenue.where('core_revenues_usd IS NOT NULL').update_all(:ok, true)

したがって、バージョンよりもはるかに高速に実行されます。

編集: @JohnNeagleの提案で修正

于 2013-03-02T20:54:10.100 に答える