Возврат исходного отношения в методе класса, вызванном отношением

У меня есть метод класса для модели под названием 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 возвращает массив. По сути, я ищу версию all для Rails 4.

Почему вас учили избегать рамок аргументов? В чем причина этого правила?

spickermann 04.09.2018 22:13

@spickermann Добавлена ​​ссылка на руководство по Ruby On Rails. Имейте в виду, что это не обязательно делает руководство правильным, просто сообщая вам, где я его взял.

mrmicrowaveoven 04.09.2018 22:32

Но то же самое руководство расскажет вам в следующем раздел, как решить проблему: используйте область видимости с аргументом ...

spickermann 04.09.2018 22:36

@mrmicrowaveoven all у вас работал?

Andrey Deineko 06.09.2018 08:15

@AndreyDeineko Не с моей версией рельсов. Есть ли решение?

mrmicrowaveoven 05.12.2018 22:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
128
1

Ответы 1

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

return all if ids.none?

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

Так что я предполагаю, что это вернет Relation on Rails 4 и новее. Текущая версия рельсов моей компании преобразует это в массив. Смотрите здесь: stackoverflow.com/questions/18456536/…. Есть ли более универсальный способ сделать это?

mrmicrowaveoven 06.09.2018 23:59

@mrmicrowaveoven, какую версию Rails использует ваша компания?

Andrey Deineko 10.09.2018 09:51

Другие вопросы по теме