ActiveRecord 4.0.0版中的find_each
是否可以替代ActiveRecord函数all
?
例如,之前我曾:
all_users = User.all
会产生一个警告,说明ActiveRelation的内容:所有都已弃用。
作为替代,我提出了:
User.find_each do |user|
all_users += user
end
这是可以接受的,还是我应该采取另一种方式?
我理解使用find_each
背后的原因是因为'批处理'允许查询在有非常大的数据集时停止运行。我们假设这种情况下数据集很小。
修改
似乎只有在使用条件时才会出现弃用错误,例如:
User.all(:conditions => ["name like ?", "%bob%"])
产生
DEPRECATION WARNING:不推荐使用Relation#all。如果你想 急切加载一个信息,你可以调用#load(例如
Post.where(published: true).load
)。如果你想得到一个数组 来自关系的记录,您可以调用#to_a(例如Post.wher e(published: true).to_a
)。 (从(irb)的irb_binding调用:8)
正确替换上述内容似乎是:
User.where("name like ?", "%bob%")
答案 0 :(得分:4)
Model.all
并未弃用,但已发生变化。它不是返回所有记录的数组,而是返回一个显着更快的ActiveRecord关系。
Model.all
旨在弃用之前延迟加载记录的Model.scoped
。 Model.all
现在可用于更轻松地链接方法,而不是scoped
。
您可以在此article中阅读所有相关内容。