使用 OR 组合多个命名范围

Zac*_*ert 5 ruby named-scope ruby-on-rails rails-activerecord

我正在尝试合并两个范围或向现有范围添加更多内容。

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)
Run Code Online (Sandbox Code Playgroud)

我无法确定如何将OR它们组合在一起或合并到一个范围中。有什么建议/指导吗?我更希望将它们合并到一个范围中。

Uzb*_*jon 1

Rails 4 及更早版本不支持OR“本机”查询。看起来它将在 Rails 5 中引入。

现在,您必须使用 SQL.where方法:

YourModel.where('field1 = ? OR field2 = ?', 1, 2)
Run Code Online (Sandbox Code Playgroud)

但是,在您的情况下,您选择使用IN=查询,并且第一个字段位于两个范围内。所以,这没有多大意义。无论如何,如果你真的有必要,你可能会逃脱这个

data = YourModel.public_bids.outbid_maxbids
YourModel.where(data.where_values.inject(:or))
Run Code Online (Sandbox Code Playgroud)