Wie führen Sie eine ODER-Abfrage in Rails 3 ActiveRecord durch? Alle Beispiele, die ich finde, haben nur UND-Abfragen.
Bearbeiten: Die OR- Methode ist seit Rails 5 verfügbar. Siehe ActiveRecord :: QueryMethods
ruby-on-rails
ruby-on-rails-3
rails-activerecord
pho3nixf1re
quelle
quelle
Post.where(column: 'something').or(Post.where(other: 'else'))
Antworten:
Verwenden Sie ARel
Das resultierende SQL:
quelle
matches
wirdLIKE
für SQLite (standardmäßig ohneILIKE
Berücksichtigung der Groß- und Kleinschreibung) und auf Postgres (benötigt explizite Groß- und Kleinschreibung wie Operator) erzeugt.Wenn Sie einen ODER-Operator für den Wert einer Spalte verwenden möchten, können Sie ein Array an übergeben,
.where
und ActiveRecord verwendetIN(value,other_value)
:Ausgänge:
Dies sollte das Äquivalent von a
OR
auf einer einzelnen Spalte erreichenquelle
in Rails 3 sollte es sein
Dies schließt auch Raw SQL ein, aber ich glaube nicht, dass es in ActiveRecord eine Möglichkeit gibt, eine ODER-Operation durchzuführen. Ihre Frage ist keine Noob-Frage.
quelle
Page.where("pages.column = ? or pages.other_column = ?", value, other_value)
Eine aktualisierte Version von Rails / ActiveRecord unterstützt diese Syntax möglicherweise nativ. Es würde ähnlich aussehen wie:
Wie in dieser Pull-Anfrage angegeben, https://github.com/rails/rails/pull/9052
Im Moment funktioniert es großartig, einfach bei Folgendem zu bleiben:
Update: Laut https://github.com/rails/rails/pull/16052 wird die
or
Funktion in Rails 5 verfügbar seinUpdate: Die Funktion wurde mit dem Rails 5-Zweig zusammengeführt
quelle
or
ist jetzt verfügbar Rails 5, kann jedoch nicht auf diese Weise implementiert werden, da erwartet wird, dass 1 Argument übergeben wird. Es erwartet ein Arel-Objekt. Siehe die akzeptierte Antwortor
Methode in ActiveRecord funktioniert, wenn Sie sie direkt verwenden. Sie kann jedoch Ihre Erwartungen brechen, wenn sie in einem Bereich verwendet wird, der dann verkettet wird.Rails hat dies kürzlich zu ActiveRecord hinzugefügt. Es scheint in Rails 5 veröffentlicht zu werden.
https://github.com/rails/rails/commit/9e42cf019f2417473e7dcbfcb885709fa2709f89
quelle
Schienen 5 werden mit einer
or
Methode geliefert. (l Tinte zur Dokumentation )Diese Methode akzeptiert ein
ActiveRecord::Relation
Objekt. z.B:quelle
Wenn Sie Arrays als Argumente verwenden möchten, funktioniert der folgende Code in Rails 4:
Weitere Informationen: ODER-Abfragen mit Arrays als Argumente in Rails 4 .
quelle
Order.where(query.where_values.inject(:or))
Arel den ganzen Weg benutzen.Das MetaWhere- Plugin ist absolut erstaunlich.
Mischen Sie einfach ORs und ANDs, schließen Sie sich den Bedingungen für jede Zuordnung an und geben Sie sogar OUTER JOINs an!
quelle
Fügen Sie einfach ein ODER in die Bedingungen ein
quelle
Ich habe gerade dieses Plugin aus der Client-Arbeit extrahiert , mit der Sie Bereiche mit z
.or.
.Post.published.or.authored_by(current_user)
. Squeel (neuere Implementierung von MetaSearch) ist ebenfalls großartig, lässt Sie jedoch keine ODER-Bereiche zu, sodass die Abfragelogik etwas redundant werden kann.quelle
Mit Rails + Arel ein klarerer Weg:
Produziert:
quelle
Sie könnten es tun wie:
oder eleganter, installiere rails_or gem und mache es wie folgt :
quelle
Ich möchte hinzufügen, dass dies eine Lösung ist, um mehrere Attribute eines ActiveRecord zu durchsuchen. Schon seit
sucht nach A und B.
quelle
quelle