在activerecord的4.0.0版本中,find_each是否可以替代activerecord函数all
例如,以前我有:

all_users = User.all

它会生成一个警告,说明activerelation中的某些内容:all已弃用。
作为替代品,我想到:
User.find_each do |user|
  all_users += user
end

这是可以接受的,还是我应该换一种方式?
我理解使用find_each背后的原因是因为“批处理”,如果有非常大的数据集,它将允许查询停止运行。假设这个数据集很小。
编辑
似乎只有在使用conditons时才会出现deprecation错误,例如:
User.all(:conditions => ["name like ?", "%bob%"])

生产:
弃用警告:relation all已弃用。如果你想的话
紧急加载关系,您可以调用加载(例如
Post.where(published: true).load如果你想得到
来自关系的记录,您可以调用“to a”(例如Post.wher e(published: true).to_a)。(从IRB_binding at(IRB)调用:8)
以上各项的正确替代品似乎是:
User.where("name like ?", "%bob%")

最佳答案

Model.all在rails 4中并不被弃用,但它已经改变了。它返回的activerecord关系比返回所有记录的数组快得多,而不是返回所有记录的数组。
Model.all被设计成不支持以前延迟加载记录的Model.scopedModel.all现在可以用于更容易地链接方法,而不是scoped
你可以在这里的article中阅读所有关于它的内容。

关于ruby - Rails 4:ActiveRecord'all'的替代品,因为现在已弃用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19528383/

10-13 05:29