2016-05-25 7 views
2

Ich versuche, zwei Bereiche zu kombinieren oder zu einem vorhandenen Bereich hinzuzufügen.Kombinieren mehrerer benannter Bereiche mit OR

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) 

Ich habe Probleme zu bestimmen, wie sie zusammen OR oder dann in einem Umfang kombinieren. Irgendwelche Vorschläge/Anleitung? Ich würde es vorziehen, dass sie in einem einzigen Bereich zusammengefasst werden.

+0

meine Antwort auf die gleiche Frage Siehe [hier] (http://stackoverflow.com/a/40269481/1876622). Beachten Sie auch ähnliche Fragen [hier] (http://stackoverflow.com/questions/1482940/) und [hier] (http://stackoverflow.com/questions/16381619/) – HeyZiko

Antwort

1

Schienen 4 und älter unterstützen keine OR Abfrage "nativ". Sieht aus wie es in Rails 5.

Vorerst eingeführt werden, würden Sie SQL mit .where Methode verwenden müssen:

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

Aber in Ihrem Fall Sie die Auswahl mit IN und = Abfragen und die Das erste Feld ist in beiden Bereichen. Es würde also nicht viel Sinn ergeben. Wie auch immer, wenn Sie wirklich haben, könnten Sie erhalten with this weg:

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

Ich habe versucht, nicht or in einem Umfang, aber Sie können die Bereiche zusammen mit Rails 5 Der neue or Verfahren zur Kette der Lage sein, wie dies:

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)) 
} 

(Beachten Sie, dass dies nur funktioniert, in Rails 5)

Sie sicherlich die Bedingungen Kette zusammen wie folgt aus:

MyObj.public_bids.or(MyObj.outbid_maxbids) 

Sehen Sie diese Antwort für weitere Informationen: Rails 5: ActiveRecord OR query

+0

Leider haben wir noch nicht auf 5 aktualisiert: ( –

+0

Nun, was ist der Überfall? Es ist fast aus der Beta!;) – mysmallidea

Verwandte Themen