2

ActiveRecord 4.0.0 版中的 ActiveRecord 功能是否find_each可以替代?all

例如,以前我有:

all_users = User.all

这会产生一个警告,说明 ActiveRelation:all 已被弃用。

作为替代,我想出了:

User.find_each do |user|
  all_users += user
end

这是可以接受的,还是我应该以另一种方式做?

我理解使用背后的原因find_each是因为“批处理”,如果有一个非常大的数据集,它将允许查询停止运行。对于这种情况,我们假设数据集很小。

编辑

似乎只有在您使用条件时才会出现弃用错误,例如:

User.all(:conditions => ["name like ?", "%bob%"]) 

产生:

弃用警告:Relation#all 已弃用。如果你想预先加载一个关系,你可以调用#load(例如 Post.where(published: true).load)。如果要从关系中获取记录数组,可以调用#to_a(例如Post.wher e(published: true).to_a)。(在 (irb):8 从 irb_binding 调用)

上面的正确替换似乎是:

User.where("name like ?", "%bob%")
4

1 回答 1

4

Model.all在 Rails 4 中没有被弃用,但它已经改变了。它不是返回所有记录的数组,而是返回一个明显更快的 ActiveRecord Relation。

Model.all旨在弃用Model.scoped以前延迟加载的记录。Model.all现在可以用于更轻松地链接方法而不是scoped.

您可以在本文中阅读所有相关信息。

于 2013-10-22T22:31:58.297 回答