私は2つのスコープを組み合わせたり、既存のスコープにいくつか追加しようとしています。複数の名前付きスコープをORで組み合わせる
OR
を一緒にまとめたり、1つのスコープに結合する方法がわかりません。どんな提案/指導?私は彼らが一つの単一の範囲に結合されることを好むだろう。
私は2つのスコープを組み合わせたり、既存のスコープにいくつか追加しようとしています。複数の名前付きスコープをORで組み合わせる
OR
を一緒にまとめたり、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))
を私はスコープで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
残念ながら私たちはまだ5にアップグレードしていません: ( –
さて、ホールドアップって何?ベータ版がほとんどない!) – mysmallidea
は、同じ質問に対する私の答えを参照してください[ここ](http://stackoverflow.com/a/40269481/1876622)。また、類似の質問[ここ](http://stackoverflow.com/questions/1482940/)と[ここ](http://stackoverflow.com/questions/16381619/) – HeyZiko