Связывание областей ActiveRecord внутри OR в Rails 6 - PullRequest
0 голосов
/ 24 апреля 2020

Учитывая следующие области:

scope :started, -> { where('start_date < :date', date: Time.zone.today) }
scope :without_end_date, -> { where(end_date: nil) }
scope :ended, -> { where('end_date < :date', date: Time.zone.today) }

Я ожидаю, что ended.or(started.without_end_date) выдаст:

WHERE ((end_date < '2020-04-24') OR (end_date IS NULL AND start_date < '2020-04-24'))

Вместо этого я получу:

WHERE ((end_date < '2020-04-24') OR (start_date < '2020-04-24') AND end_date IS NULL)

Как я могу заставить ActiveRecord обрабатывать связанные области внутри .or как одну группу?

Я знаю, что могу сделать это:

ended.or(where('end_date IS NULL AND start_date < :date', date: Time.zone.today))

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

1 Ответ

0 голосов
/ 24 апреля 2020

Вы можете попробовать с:

CommunityEvent.ended.or(CommunityEvent.without_end_date.started)
# SELECT "community_events".*
# FROM "community_events"
# WHERE ((end_date < '2020-04-24') OR
         "community_events"."end_date" IS NULL AND (start_date < '2020-04-24'))

Что, если пропустить дополнительные скобки, может работать так же.

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