Ich habe festgestellt, dass die Model.where
Methode immer ein Array zurückgibt, auch wenn es nur ein Ergebnis gibt, wo dies bei der Model.find
Methode nicht der Fall ist. Gibt es dafür einen Grund? Ich dachte, Model.where
war die bevorzugte Funktion seit Rails 3.X.
Sollte ich verwenden, Model.find
wenn ich ein einzelnes Ergebnis Model.where
erwarte und wenn ich mehr als ein Ergebnis erwarte?
find
kann mehrere Objekte in einem Array zurückgeben - versuchenUser.find [1,2,3]
(findet Benutzer mit den IDs 1, 2 und 3) ... aber ja, ich denke, Andrew hat Recht mit dem RestUser.where(id: [1, 2, 3])
wird aber in diesem Fall bevorzugt, also habe ich es nicht einmal in Betracht gezogen. Wie immer empfehle ich, die API-Dokumentation zu lesen (auf die ich in meiner Antwort verwiesen habe), da sie die detailliertesten Informationen enthält..find(:all, ...)
gibt ein Array. Was ist der Unterschied zwischen Finden und Wo?where
gibt kein Array zurück (obwohlModel.where(...).class
es lügt und sagt, dass es ist).Nimmt tatsächlich
find_by
ein Modellobjekt vonwhere
erhaltenActiveRecord::Relation
def find_by(*args) where(*args).take end
Quelle
quelle
Model.find
verwendet die Primärschlüsselspalte. Daher gibt es immer genau ein oder kein Ergebnis. Verwenden Sie es, wenn Sie nach einem bestimmten Element suchen, das durch seine ID gekennzeichnet ist.quelle
.find(:conditions => {:col_name => some_vals})
.