1

因此,我在表中的所有 50,000 多条记录中运行了一些逻辑(实际上有几条,但我们在这里只讨论一条它们都是相同的操作)并标记布尔指标:

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')谢谢。

同样“令人兴奋”的答案将解释为什么这是不可能的,因为某种 lambda 演算计算或者你有什么

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)

所以它会比你的版本运行得快得多。

编辑:用@John Neagle 建议更正

于 2013-03-02T20:54:10.100 回答