В Rails 5, как мне написать искатель "ИЛИ" запрос, чтобы сказать exlucde из списка или быть ноль? - PullRequest
1 голос
/ 01 мая 2020

Я хочу написать поисковый запрос Rails 5, который возвращает объекты, если поле не принадлежит определенному набору значений или является нулевым. Я попробовал следующее

Order
.joins(...joins1...)
.joins(...joins2...)
.left_outer_joins(:customer => :program)
      .where.not(
        :programs => { :number => excluded_numbers }
      ).or(:programs => { :number => nil})
    .where(...)

, но в результате получилось

ArgumentError: You have passed Hash object to #or. Pass an ActiveRecord::Relation object instead.

Как правильно сформулировать мое предложение "ИЛИ"?

1 Ответ

1 голос
/ 01 мая 2020

Как говорится в ошибке, вы должны передать ActiveRecord::Relation, сейчас вы передаете { :programs => { :number => nil} } га sh.

Попробуйте:

orders = Order.joins(...).joins(...).left_outer_joins(customer: :program)
orders.where.not(programs: { number: excluded_numbers })
      .or(orders.where(programs: { number: nil }))
      .where(...)

условие для работы or состоит в том, что эти два отношения должны быть структурно совместимы , поэтому оба должны включать в себя соединения joins и left_outer_joins, которые вы используете. Для этого их нужно хранить в локальной переменной.

...