2015-09-26 22 views
5

Ist Rails find Methode veraltet?Wird Rails veraltet gefunden?

In den alten Tagen war find(1) der bevorzugte Weg, nach ID zu finden.

Ist es besser, find_by(id:1) anstelle von find(1) zu verwenden?

+8

'find' ist die allererste Methode, die im ActiveRecord [Rails Guide] erwähnt wird (http://guides.rubyonrails.org/active_record_querying.html#retrieving-a-single-object), also denke ich, dass es sicher ist zu sagen es ist immer noch der Weg zu gehen. –

+3

Seht ihr in RubyMine veraltet? Wenn ja, ist es ein bekannter und gemeldeter Fehler: https://youtrack.jetbrains.com/issue/RUBY-17979 –

Antwort

4

Keine Methode ist veraltet (soweit ich weiß). Der Unterschied zwischen find und find_by() ist, was sie zurückgeben, wenn ein Datensatz nicht existiert. Wenn ein Datensatz mit einer ID von 23 nicht vorhanden ist, ist das, was man bekommt:

Model.find(23) 
=> ActiveRecord::RecordNotFound: Couldn't find Model with 'id'=23 

Oder

Model.find_by(id: 23) 
=> nil 

Mit find_by toleranter ist, wenn Sie Abfragen machen, wo einen nicht existierender Rekord ist möglich, weil Sie statt einer Ausnahme einen Wert nil erhalten.

0

Ab Rails 4.2.1 ist es nicht. Here ist die API-Dokumentation dafür (nicht offiziell, aber ziemlich gut). Was ich denke, dass Sie sich angesehen haben, ist this method, die in Rails 3.0.0 veraltet war.

Ich habe noch nie die Methode find_by() verwendet. Ich glaube, die besser/neuere Methode zu verwenden, ist die where() Verfahren, etwa so:

User.where(name: "Bob", email: "[email protected]") 
+1

'where' ist nicht besser/neuer, es macht nur etwas anderes. Und dieser veraltete Fund, auf den Sie verlinken, ist immer noch die gleiche Methode. Es wurde gerade von 'Base' nach' FinderMethods' verschoben. – Mischa

+3

'find_by (x)' kann als Äquivalent zu 'where (x) .first' betrachtet werden. –

+0

.where() gibt ein Array von Objekten zurück, wohingegen .find_by() eine Instanz eines Objekts zurückgibt. –

1

Wahrscheinlich beziehen Sie auf die deprecation von ActiveRecord::Base#find wie find (: first) und find (: all), die für erste und alle Methoden sind veraltet.

Die Unterstützung für diese Methode wurde von rails 3.2 entfernt.

Die von Ihnen verwendete Methode (ActiveRecord::FinderMethods#find) ist nicht veraltet.

+1

FWIW, ich denke, die Verwirrung ist mit den 'find_by_xxx' Methoden. Ich denke, das waren in Rails 4 veraltet. –

Verwandte Themen