Как использовать «или» в областях - PullRequest
1 голос
/ 24 октября 2019

Пытается использовать or с областями видимости, но, похоже, это не работает.

first_20 возвращает отношение, но когда я использую или, он жалуется, что возвращает массив, и выдаетошибка. В большинстве примеров, которые я могу найти, это делается точно так же, как у меня.

 scope :first_20, -> {
    first(20)
  }

 scope :starred, ->(list_or_urls) {
   where(url: list_or_urls)
 }

, а затем назовите его ..

Org.first_20.or(starred(urls))

Получение

ArgumentError (You have passed Array object to #or. Pass an ActiveRecord::Relation object instead.)
 Org.first_20.or(starred(list_or_urls))

Как можно использовать or с областями действия?

Ответы [ 2 ]

4 голосов
/ 24 октября 2019

В области действия first_20 используйте следующий запрос вместо ActiveRecord::Relation, first(20) возвращает Array вместо relation, об этом говорит ваша ошибка

scope :first_20, -> { limit(20).order('id ASC') }

и, поскольку starred - это метод класса, вам нужно вызвать его для Org class.

Org.first_20.or(Org.starred(urls))

Надеюсь, это поможет!

2 голосов
/ 24 октября 2019

Я согласен с Rajdeep's ответ, это определенно будет работать, следующий способ сделать это

scope :first_20_or_starred, ->(list_or_urls) { first_20.or(starred(list_or_urls)}

и затем

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