Объединение нескольких именованных областей с ИЛИ
Я пытаюсь объединить две области или добавить еще несколько к существующей области.
scope :public_bids, -> {
where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE],
bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])
scope :outbid_maxbids, -> {
where(status: Status::OUTBID, bid_type: BidType::MAXBID)
У меня проблемы с определением как OR
их вместе или объединить затем в одну область. Любые предложения / рекомендации? Я бы предпочел, чтобы они были объединены в одну сферу.
2 ответа
Я не пробовал использовать or
в области видимости, но вы можете объединить области видимости, используя новый Rails 5 or
метод, как это:
scope :public_or_outbid, -> {
where(status: [Status::ACCEPTED, Status::OUTBID, Status::SOLD, Status::NO_SALE], bid_type: [BidType::MANUAL, BidType::AUTO, BidType::LIVE])\
.or(where(status: Status::OUTBID, bid_type: BidType::MAXBID))
}
(Обратите внимание, что это работает только в Rails 5)
Вы, конечно, можете связать условия вместе следующим образом:
MyObj.public_bids.or(MyObj.outbid_maxbids)
Смотрите этот ответ для более подробной информации: Rails 5: ActiveRecord ИЛИ запрос
Rails 4 и старше не поддерживают OR
запрос "изначально". Похоже, это будет введено в Rails 5.
На данный момент вам придется использовать SQL с .where
метод:
YourModel.where('field1 = ? OR field2 = ?', 1, 2)
Но, в вашем случае, вы выбираете с помощью IN
а также =
запросы и первое поле находится в обеих областях. Так что это не имеет особого смысла. В любом случае, если вам действительно нужно, вам может это сойти с рук:
data = YourModel.public_bids.outbid_maxbids
YourModel.where(data.where_values.inject(:or))