如何在find_in_batches中包含:select子句.以下命令在'字段列表'中抛出错误"Mysql :: Error:Unknown column'users.id':.
Post.find_in_batches(:batch_size => 100, :select => "users.id, users.name, categories.name, posts.id", :include => [:user, :category]) do |group|
#stuff with group
end
Run Code Online (Sandbox Code Playgroud)
小智 32
因此,如果您正在考虑使用find_in_batches,则可能意味着您需要完成大量记录,而您很可能只希望从DB返回选择字段.
在Rails 3/4中,您可以使用任何其他类型的ActiveRecord :: Relation方法链接find_in_batches(或者至少,大多数......我还没有亲自测试过所有这些).
这可能就是你要找的东西
User.select(:id).find_in_batches(:batch_size => 100) do |group|
# do something with group...
# like print all the ids
puts group.map(&:id)
end
Run Code Online (Sandbox Code Playgroud)
如果你在控制台中尝试这个,它就像这样生成SQL ...
SELECT id FROM `users` WHERE (`users`.`id` > 895846) ORDER BY `users`.`id` ASC LIMIT 100
Run Code Online (Sandbox Code Playgroud)
在此处查看更多信息:http://api.rubyonrails.org/classes/ActiveRecord/Batches.html
mar*_*lly -31
如果您只检索每个查询模型的所有字段,那么您使用 Rails 的生活将会更加轻松,如下所示:
Post.find_in_batches(:batch_size => 100, :include => [:user, :category]) do |post|
u = post.user
c = post.category
# do stuff
end
Run Code Online (Sandbox Code Playgroud)
正如您的问题所示,修剪后的选择列表提供了有限的数据库性能改进,但在大多数情况下不足以值得使用更笨重的代码。
| 归档时间: |
|
| 查看次数: |
9240 次 |
| 最近记录: |