Заказанные партии прозрачного раствора - PullRequest
1 голос
/ 27 июня 2019

Учитывая следующий код в 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

Конечно, мы можем использовать некоторый нестандартный код для достижения этой цели, но мне интересно, есть ли рельсовый путь?

Я нашел это , но я не вижу возможности изменитьэто поведение.Что если мне не нужен asc, но мне нужен desc.

1 Ответ

1 голос
/ 27 июня 2019

Прямо из документов :

ПРИМЕЧАНИЕ. Установить порядок невозможно.Это автоматически устанавливается в порядке возрастания на первичном ключе («id ASC»), чтобы сделать работу заказа партии.Это также означает, что этот метод работает только тогда, когда первичный ключ может быть упорядочен (например, целое число или строка).

Причина, по которой он намеренно ограничен порядком primary_key, поскольку эти значения не меняются.Так что, если вы изменяете данные при их обходе, вы не получите повторные варианты обратно.

В случае id: :desc вы не получите новые записи, которые были вставлены после запуска транзакции для получения начальной партии.

Refs

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

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

ActiveRecord find_each в сочетании с лимитом и порядком

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...