使用find_each时,有什么方法可以按特定列排序吗?

时间:2019-12-24 10:32:16

标签: ruby-on-rails ruby activerecord

我要按名称进行排序。

Books.order(:name).find_each(batch_size: 50) do |book|
end

但这不起作用。

[1m[36mBook Load (411.7ms)[0m  [1m[34mSELECT "books".* FROM "books" ORDER BY "books"."id" ASC LIMIT $1[0m  [["LIMIT", 50]]

使用order by specific column时有什么方法可以find_each

2 个答案:

答案 0 :(得分:3)

find_each文档中:

  

无法设置顺序。即自动设置为   升序为主键(“ id ASC”)进行批量订购   工作。这也意味着该方法仅在主键   是可排序的(例如整数或字符串)。

答案 1 :(得分:2)

我想您可以添加一个分页宝石(您的Gemfile中可能已经有一个will_paginatekaminari

那会让你做...

total_batches = (Book.all.count / 50.0).ceil
(1..total_batches).each do |batch|
  Book.order(:name).paginate(page: batch, per_page: 50).each do |book|
    # do stuff
  end
end