Was ist der Unterschied zwischen find
, where
und find_by_id
? Sie funktionieren alle, wenn Sie versuchen, einen Benutzer mit einer ID zu finden.Was ist der Unterschied zwischen find, wo und find_by_id?
Antwort
Der Unterschied ist, was sie zurückgeben, wenn ein Datensatz gefunden wird oder wenn er nicht gefunden wird. Betrachten Sie die folgenden Beispiele:
>> User.create name: 'THE USER' # creates a user with id = 1
>> User.find(1) # returns the user
>> User.find_by_id(1) # returns the user
>> User.where(id: 1).first # returns the user
Wie Sie sehen können, eine bestehende Benutzer mit einer der drei Methoden abgerufen werden können. Der große Unterschied mit where
Verwendung ist, können Sie Kettenbefehle (natürlich ohne first
ersten Aufruf.)
einen Blick Lassen Sie haben an, wenn Sie versuchen, einen Datensatz zu finden, der nicht bestehenden
>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil
So Hier ist es offensichtlich, dass Sie eine Ausnahme erhalten, wenn Sie find
verwenden, um nach einem Datensatz zu suchen, der nicht vorhanden ist. Diese Ausnahme ist ActiveRecord::RecordNotFound
, die eine 404 in der Produktionsumgebung rendert.
Hoffe, das hilft!
UPDATE
Schienen 4 verwendet die folgende Syntax für find_by
>> User.find_by(id: 1) # returns nil if there's no user with an id of 1
>> User.find_by!(id: 1) # raises ActiveRecord::RecordNotFound when no record is found
find
=> dies verwendet wird, durch id
Zeile zu finden. Dies wird einen einzelnen Datensatz zurückgeben.
YourModel.find(2)
Address.find(1)
find_by
=> diese verwendet wird Zeile mit allen Attributen der Aufzeichnung zu erhalten. Dies liefert den ersten übereinstimmenden Datensatz, wenn die Bedingung übereinstimmt.
YourModel.find_by_attrname("value")
Address.find_by_street_name_and_city("Andheri", "Newyork")
Addess.find_by_id(4)
where
=> das verwendet wird, erhalten aktive Datensätze basierend auf Bedingungen aktive Datensatz Beziehung zurückzukehren (d) kann null oder mehrere Datensätze sein.
YourModel.where(:attrname => "something")
Address.where(:city => "Newyork")
findet => Diese Rückkehr einzelner Datensatz, wenn die angegebene primary_key (id) im System vorhanden ist sonst in einem Fehler geben.
Model.find(required_id_value)
find_by => Dies wird einzelnen Datensatz zurückkehrt, hängt von dem Attribute gegeben, und wenn der Wert des Attributs in der DB ist nicht vorhanden wird es Null zurück.
Model.find_by_name("your name")
Name hier ist das Attribut und es muss in Ihrem Modal vorhanden sein.
wo => Dies wird eine aktive Datensatzbeziehung mit null oder mehr Datensätze zurückgeben, die Sie zuerst verwenden müssen, um nur einen Datensatz zurückzugeben, oder Null, falls Nulldatensätze zurückgeben.
Model.where(id: id_value).first
** Record.find (0) ** wirft 'ActiveRecord :: RecordNotFound: Konnte Datensatz mit 'ID' 0 nicht finden ** Record.find_by (id: 0) ** gibt 'nil' zurück Record.find_by_id (0) gibt auch nil zurück, obwohl es in späteren Versionen von rails nicht mehr verwendet wird. ** Record.where (id: 0) ** gibt ein leeres Array zurück – Hanmaslah
- 1. Was ist der Unterschied zwischen find() und children() in jquery?
- 2. Was ist der Unterschied zwischen Matcher.lookingAt() und find()?
- 3. Was ist der Unterschied zwischen `==` und `ist`?
- 4. Unterschied zwischen Mac `find` und Linux` find`
- 5. Unterschied zwischen Find und FindAsync
- 6. Was ist der Unterschied zwischen wo und beitreten?
- 7. Linq: Was ist der Unterschied zwischen Auswählen und Wo?
- 8. Was ist der Unterschied zwischen:.! und: r !?
- 9. Was ist der Unterschied zwischen Difftime und '-'?
- 10. Was ist der Unterschied zwischen $ und $$?
- 11. Was ist der Unterschied zwischen Verilog! und ~?
- 12. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 13. Was ist der Unterschied zwischen/* ... */und/** ... */
- 14. Was ist der Unterschied zwischen `&` und `ref`?
- 15. Was ist der Unterschied zwischen $ (...) und `...`
- 16. Was ist der Unterschied zwischen .Equals und ==
- 17. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 18. Was ist der Unterschied zwischen + = und = +?
- 19. Was ist der Unterschied zwischen? und ? = Nil
- 20. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 21. Was ist der Unterschied zwischen:
- 22. , was der Unterschied zwischen „mit“ und „load“ in Laravel ist
- 23. Was ist der Unterschied zwischen $ (e.target) .find und template.find ('input'). Wert
- 24. Wo ist der Unterschied zwischen Xamarin.Mac und Mono: OSX
- 25. Was ist der Unterschied zwischen ExecuteScalar, ExecuteReader und ExecuteNonQuery?
- 26. jQuery: Was ist der Unterschied zwischen '$ (this)' und 'this'?
- 27. Was ist der Unterschied zwischen dnxcore50 unter Windows und Linux?
- 28. Was ist der Unterschied zwischen der JSP und der JSTL?
- 29. Was ist der Unterschied zwischen Data-Dojo-Typ und Dojotype?
- 30. Was ist der Unterschied zwischen ndarray und Array in numpy?
Sie sollten beachten, dass 'find_by_ *' Methoden in Schienen 4 für 'find_by deprecrated sind' find_by (id:: (*: ...) 'hier so sein, dass wäre ...) ' – pjam
wow, ich wusste das nicht. Vielen Dank! Warum wird das hier nicht erwähnt? http://edgeguides.rubyonrails.org/4_0_release_notes.html – jvnill