1

给定 ruby​​/rails 中的以下代码,省略了块代码。

Model.order(id: :desc).find_in_batches { |group| ... }

如果你运行它,你会得到一个警告。

Scoped order and limit are ignored, it's forced to be batch order and batch size

当然我们可以使用一些自定义样板代码来实现这一点,但我想知道是否有rails-way?

我发现了这一点,但我看不到改变它的可能性是行为。如果我不需要 asc 但我需要 desc 怎么办?

4

1 回答 1

1

直接来自文档

注意:无法设置顺序。这会自动设置为主键(“id ASC”)升序,以使批量排序工作。这也意味着此方法仅在主键可排序(例如整数或字符串)时有效。

故意将其限制为 primary_key 顺序的原因是因为这些值不会改变。因此,如果您在遍历数据时对数据进行了变异,您将不会得到重复的选项。

如果id: :desc您不会获得在事务开始后插入的新记录以获取初始批次。

参考文献

https://rails.lighthouseapp.com/projects/8994/tickets/2502-patch-arbase-reverse-find_in_batches

https://ww.telent.net/2012/5/4/changeing_sort_order_with_activerecord_find_in_batches

ActiveRecord find_each 结合limit和order

于 2019-06-27T09:23:56.890 回答