Ich will das tun
Model.where('id = ?', [array of values])
Wie kann ich diese Suche durchführen, ohne OR-Anweisungen miteinander zu verketten?
Ich will das tun
Model.where('id = ?', [array of values])
Wie kann ich diese Suche durchführen, ohne OR-Anweisungen miteinander zu verketten?
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])
Model.where(id: [array of values])
1..8
ist bereits Array-ähnlich.
Aus dem ActiveRecord Query Interface-Handbuch
Wenn Sie Datensätze mit dem IN-Ausdruck suchen möchten, können Sie ein Array an den Bedingungs-Hash übergeben:
Client.where(orders_count: [1,3,5])
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])
find_by
ist eigentlich where().take
. Model.find_by(id: [1, 2, 3])
wird nur zurückkehrenModel(id: 1)
find_by_id([1, 2, 3])
Wenn Sie nach einer Abfrage in Mongoid suchen, ist dies die richtigeModel.where(:field.in => ["value1", "value2"] ).all.to_a
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.
Findet den ersten Datensatz, der den angegebenen Bedingungen entspricht. Es gibt keine implizite Bestellung. Wenn die Bestellung wichtig ist, sollten Sie sie selbst angeben. Wenn kein Datensatz gefunden wird, wird null zurückgegeben.
def find_by(*args)
where(*args).take
rescue RangeError
nil
end
mittlerweile , wo es eine Beziehung zurückkehren
Gibt eine neue Beziehung zurück, die das Ergebnis des Filterns der aktuellen Beziehung gemäß den Bedingungen in den Argumenten ist.
In Ihrer Situation lautet der entsprechende Code also:
Model.where(id: [array of values])