2016-05-25 17 views
2

私は2つのスコープを組み合わせたり、既存のスコープにいくつか追加しようとしています。複数の名前付きスコープをORで組み合わせる

ORを一緒にまとめたり、1つのスコープに結合する方法がわかりません。どんな提案/指導?私は彼らが一つの単一の範囲に結合されることを好むだろう。

+0

は、同じ質問に対する私の答えを参照してください[ここ](http://stackoverflow.com/a/40269481/1876622)。また、類似の質問[ここ](http://stackoverflow.com/questions/1482940/)と[ここ](http://stackoverflow.com/questions/16381619/) – HeyZiko

答えて

1

Rails 4およびそれ以前のバージョンでは、「ネイティブで」クエリORはサポートされていません。

YourModel.where('field1 = ? OR field2 = ?', 1, 2) 

しかし、あなたのケースでは、あなたが選択されている使用してIN=クエリと:それは今のところ5

レールに導入されるようになります、あなたは.whereメソッドでSQLを使用する必要があります最初のフィールドは両方のスコープにあります。だから、それはあまり意味がないでしょう。あなたは本当に、あなたが離れてwith this得る可能性がありますする必要がある場合はとにかく、:

data = YourModel.public_bids.outbid_maxbids 
YourModel.where(data.where_values.inject(:or)) 
1

を私はスコープで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 OR query

+0

残念ながら私たちはまだ5にアップグレードしていません: ( –

+0

さて、ホールドアップって何?ベータ版がほとんどない!) – mysmallidea

関連する問題