Jaka jest różnica między find
, i find_by_id
? Wszystkie działają, gdy próbujesz znaleźć użytkownika, któremu nadano identyfikator.Jaka jest różnica między find, where i find_by_id?
Odpowiedz
Różnica polega na tym, co zwracają po znalezieniu rekordu lub gdy go nie znaleziono. Rozważ następujące przykłady:
>> 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
Jak widać, istniejącego użytkownika można pobrać za pomocą dowolnej z 3 metod. Duża różnica z użyciem where
to można komendy łańcuchowe (oczywiście, bez poddawania first
pierwszy.)
Rzućmy okiem na kiedy starał się znaleźć zapis, który nie jest istniejącą
>> User.find(2) # raises an exception
>> User.find_by_id(2) # nil
>> User.where(id: 2).first # nil
So tutaj, jest oczywiste, że gdy używasz find
do wyszukiwania rekordu, który nie istnieje, otrzymujesz wyjątek. Ten wyjątek to ActiveRecord::RecordNotFound
, który renderuje 404 w środowisku produkcyjnym.
Mam nadzieję, że to pomoże!
UPDATE
szyny 4 ma następującą składnię dla 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
=> ten jest stosowany, aby znaleźć wiersz po id
. To zwróci pojedynczy rekord.
YourModel.find(2)
Address.find(1)
find_by
=> służy do zdobycia rzędów przez dowolne cechy rekordu. Spowoduje to zwrócenie pierwszego pasującego rekordu, jeśli warunek zostanie spełniony.
YourModel.find_by_attrname("value")
Address.find_by_street_name_and_city("Andheri", "Newyork")
Addess.find_by_id(4)
where
=> to stosuje się aktywne rejestry oparte na warunkach powrotu aktywnego związku wpisu (tj), może być zero lub więcej wpisów.
YourModel.where(:attrname => "something")
Address.where(:city => "Newyork")
znaleźć => Powrót ten pojedynczy rekord czy dany primary_key (ID) w systemie istnieje poza tym daje błąd.
Model.find(required_id_value)
find_by => To zwróci pojedynczy rekord zależy od danego atrybutu, a jeżeli wartość atrybutu nie istnieje w DB zwróci nil.
Model.find_by_name("your name")
nazwa tutaj jest atrybutem i musi istnieć w swoim modalu.
gdzie => To zwróci Active Record relację z zera lub więcej zapisów, które trzeba użyć najpierw powrócić tylko jeden rekord lub zerowa w przypadku zerowej rekordy zamian.
Model.where(id: id_value).first
** Record.find (0) ** podnosi "ActiveRecord :: RecordNotFound: Nie można znaleźć Record with 'id' = 0'' ** Record.find_by (id: 0) ** zwraca 'nil' Record.find_by_id (0) również zwraca zero, mimo że jest przestarzałe w późniejszych wersjach szyn. ** Record.where (id: 0) ** zwraca pustą tablicę – Hanmaslah
- 1. Jaka jest różnica między Matcher.lookingAt() i find()?
- 2. Jaka jest różnica między HAVING a WHERE?
- 3. Różnica między Find i FindAsync
- 4. Jaka jest różnica między HAVING i WHERE w zapytaniu MySQL?
- 5. Linq: Jaka jest różnica między Select i Where
- 6. Jaka jest różnica między? : i ||
- 7. Jaka jest różnica między $ i $$?
- 8. Różnica między "find -delete" a "rm -rf"?
- 9. Szyny .where vs .find
- 10. Jaka jest różnica między Subtotal i BaseSubtotal?
- 11. Jaka jest różnica między DetachedCriteria i ICriteria
- 12. Jaka jest różnica między & # x00A0; i ?
- 13. Jaka jest różnica między lex i yacc
- 14. jaka jest różnica między dijit i dojo
- 15. Jaka jest różnica między Control.Select() i Control.Focus()?
- 16. Jaka jest różnica między System.Windows.Controls.Control i System.Windows.Forms.Control?
- 17. Jaka jest różnica między apletami i SWING?
- 18. Jaka jest różnica między session.commit() i session.flush()?
- 19. Jaka jest różnica między ImageView.setBackgroundResource i ImageView.setImageResource?
- 20. Jaka jest różnica między Konwertuj i parsuj?
- 21. Jaka jest różnica między JSP i JSTL?
- 22. Jaka jest różnica między Lazarus i CodeTyphon
- 23. Jaka jest różnica między crc32 i crc32b?
- 24. Jaka jest różnica między TypedArray.getInteger() i TypedArray.getInt()?
- 25. jaka jest różnica między ARM7 i ARM7s
- 26. Jaka jest różnica między http_build_str() i http_build_query()?
- 27. Jaka jest różnica między "CompletionStage" i "CompletableFuture"?
- 28. Jaka jest różnica między mock.patch.object (... i mock.patch (
- 29. Jaka jest różnica między GetBlobReference i GetBlobReferenceFromServer?
- 30. Jaka jest różnica między NSLayoutAttributeBaseline i NSLayoutAttributeBottom?
Należy pamiętać, że wszystkie '*' find_by_ metody deprecrated w szynach 4 na korzyść 'find_by (* ...)' więc o to byłoby być: 'find_by (id: ...) ' – pjam
wow Nie wiedziałem tego. dzięki! dlaczego tego tu nie ma? http://edgeguides.rubyonrails.org/4_0_release_notes.html – jvnill