【发布时间】:2013-10-22 21:07:31
【问题描述】:
在 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 背后的原因是因为'批处理'如果有一个非常大的数据集,它将允许查询停止运行。对于这种情况,我们假设数据集很小。
编辑
似乎只有在使用条件时才会出现弃用错误,例如:
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%")
【问题讨论】:
-
我不认为链接的问题与此完全相同,因为他们只想要 5 条记录并按顺序排列。另外在搜索
ActiveRecord all deprecation的时候没有出现那篇文章,是因为标题吗?当我在 irb 中尝试时,Hallucynogenyc 的答案不起作用。 EG:使用User或User.to_a似乎无效。 -
别担心,仅供参考 - 这不是 Rails。
标签: ruby ruby-on-rails-4 activerecord sinatra sinatra-activerecord