У меня есть метод класса в модели с именем 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
.