Возврат исходного отношения в методе класса, вызванном на отношении - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть метод класса в модели с именем order_by_ids(ids), который вызывается отношением ActiveRecord. Ниже приведен пример его использования:

User.where(id: [1,2,3]).order_by_ids([2,1,3])

... вернет Пользователей 1, 2 и 3 в следующем порядке: [2,1,3]

Я бы хотел, чтобы он возвращал исходное отношение (по сути, ничего не делая), если передал пустой массив.

Следующий код возвращает весь класс, а не только отношение, к которому он вызывается:

return self unless ids.present?

Следующее работает на 100%, но кажется не элегантным. Кроме того, я думаю, что он запускает ненужный запрос (в любом случае, в консоли он работает медленнее):

return where.not(id: nil) unless ids.present?

Есть ли быстрый способ просто вернуть отношение, к которому оно обращено? Я теоретически мог бы сделать это областью применения, но меня учили избегать областей с аргументами (см. это руководство для справки).

Примечание: я использую Rails 3, поэтому all возвращает массив. По сути, я ищу версию Rails 4 all.

1 Ответ

0 голосов
/ 04 сентября 2018

Следующие элементы должны сохранять цепочку области восходящего потока (возвращая all, а не self):

return all if ids.none?

P.S. Именованные области - это совершенно приемлемый и общепринятый способ работы с запросами.

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