Oder & und in Rails ActiveRecord where-Klausel
Ich bin mit Rails 3.2 und ich hab eine Datenbank-Tabelle in die ich möchte, um herauszufinden, alle Zeilen in übereinstimmung mit den folgenden Kriterien:
a = wahr und b = wahr und ( 0< c <1 oder d=1), a, b, c, d sind die Spalten.
Kann ich so etwas wie:
Route.where(:a => true,
:b => true,
:c => 0..1 OR :d=1
).all
Werfen Sie einen Blick auf stackoverflow.com/questions/3548548/...
Haben Sie einen Blick auf diese screencast railscasts.com/episodes/354-squeel
Haben Sie einen Blick auf diese screencast railscasts.com/episodes/354-squeel
InformationsquelleAutor Webspirit | 2012-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich kann mich irren, aber ich glaube nicht, dass Sie Formular-Abfrage mit der Arel-basiert, wo Funktion; Sie müsste die form der Datenbank-query-string selbst.
Angenommen, Sie sind mit SQLite oder Postgres:
Habe ich noch nicht getestet mit diesem code, aber ich vermute, dass könnte der job für Sie tun. Hinweis: dies ist weniger "portable" - code; wenn Sie, ändern Sie die Datenbank, die Sie mithilfe der Abfrage können brechen.
where('a = :true and b = :true and ((c > :lo and c < :hi) or d = :d', :true => true, :lo => 0, :hi => 1, :d => 1)
wäre sicherer, verschiedene Datenbanken verwendet verschiedene Dinge, die für "wahr". Oder sogar.where(:a => true, :b => true).where('c > :lo and c < :hi) or d = :d', ...)
.InformationsquelleAutor Rob d'Apice
In Rails 4 Sie können auch
Route.where(:a => true,:b => true,:c => [1,2]).all
Finden, wo c ist 1 oder 2.
Ja .alle ist nicht erforderlich, ich war einfach nur halten Sie es im Einklang mit der Frage.
InformationsquelleAutor user2031423
Denke ich, dass Rob Recht arel nicht unterstützt ODER noch nicht. Aus der arel Website:
Dem ODER-operator wird nicht unterstützt. Es funktioniert so:
Dem UND-operator verhält sich ähnlich.
Sorry, hatte ich verwechselt Sie mit dem original-Frage Autor.
InformationsquelleAutor pepe