我正在尝试合并两个作用域或向现有作用域添加更多作用域。
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
在一起或合并到一个范围内。有什么建议/指导吗?我希望将它们合并为一个范围。
我还没有尝试过在作用域中使用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:活动记录或查询
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))