在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.scoped
。Model.all
现在可以用于更容易地链接方法,而不是scoped
。
你可以在这里的article中阅读所有关于它的内容。
关于ruby - Rails 4:ActiveRecord'all'的替代品,因为现在已弃用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19528383/