Ich will das tun
Model.where('id = ?', [array of values])
Wie kann ich diese Suche durchführen, ohne OR-Anweisungen miteinander zu verketten?
ruby-on-rails
rails-activerecord
Quantumpotato
quelle
quelle
Antworten:
Von hier aus scheint es mit einer SQL-
in
Anweisung zu geschehen :Model.where('id IN (?)', [array of values])
Oder einfacher, wie kdeisz betonte (Verwenden von Arel zum Erstellen der SQL-Abfrage):
Model.where(id: [array of values])
quelle
Model.where(id: [array of values])
1..8
ist bereits Array-ähnlich.Aus dem ActiveRecord Query Interface-Handbuch
Client.where(orders_count: [1,3,5])
quelle
Zur besseren Lesbarkeit kann dies noch weiter vereinfacht werden, um:
Model.find_by(id: [array of values])
Dies entspricht der Verwendung
where
, ist jedoch expliziter:Model.where(id: [array of values])
quelle
find_by
ist eigentlichwhere().take
.Model.find_by(id: [1, 2, 3])
wird nur zurückkehrenModel(id: 1)
find_by_id([1, 2, 3])
Sie können den Operator 'in' verwenden:
Model.in(id: [array of values])
quelle
Wenn Sie nach einer Abfrage in Mongoid suchen, ist dies die richtige
Model.where(:field.in => ["value1", "value2"] ).all.to_a
quelle
Es gibt einen 'kleinen' Unterschied zwischen where und find_by .
find_by gibt nur einen Datensatz zurück, wenn er gefunden wird, andernfalls ist er gleich Null.
def find_by(*args) where(*args).take rescue RangeError nil end
mittlerweile , wo es eine Beziehung zurückkehren
In Ihrer Situation lautet der entsprechende Code also:
Model.where(id: [array of values])
quelle