Czy metoda Rails find
jest przestarzała?Czy Railsy są przestarzałe?
W dawnych czasach preferowanym sposobem wyszukiwania według id był find(1)
.
Czy lepiej używać find_by(id:1)
zamiast find(1)
?
Czy metoda Rails find
jest przestarzała?Czy Railsy są przestarzałe?
W dawnych czasach preferowanym sposobem wyszukiwania według id był find(1)
.
Czy lepiej używać find_by(id:1)
zamiast find(1)
?
Ani metoda jest przestarzałe (o ile wiem). Różnica między find
i find_by()
jest tym, co zwracają, gdy rekord nie istnieje. Jeśli rekord z ID 23 nie istnieje, to jest to, co masz:
Model.find(23)
=> ActiveRecord::RecordNotFound: Couldn't find Model with 'id'=23
Albo
Model.find_by(id: 23)
=> nil
Korzystanie find_by
jest bardziej wyrozumiały jeśli robisz kwerend gdzie nieistniejący rekord jest możliwe, ponieważ otrzymujesz wartość nil
zamiast wyjątku.
Począwszy od Rails 4.2.1, nie jest. Here to dokumentacja API (nie oficjalny, ale całkiem niezły). To, co myślę, że patrzysz, to this method, które zostało wycofane w Rails 3.0.0.
Nigdy nie użyłem metody find_by()
. Uważam, że lepsze/nowsze metody użyć, jest metoda where()
, tak:
User.where(name: "Bob", email: "[email protected]")
'where' is not better/newer, po prostu robi coś innego. A ten przestarzały znaleźć link do wciąż jest w zasadzie ta sama metoda. Po prostu przeniósł się z 'Base' na' FinderMethods'. – Mischa
'find_by (x)' może być uważane za równoważne 'where (x) .first'. –
.where() zwraca tablicę obiektów, podczas gdy .find_by() zwraca instancję obiektu. –
Pewnie masz na myśli Wycofanie ActiveRecord::Base#find jak: znalezienia (pierwszy) i find (: all) które zastąpiona pierwszych i wszystkich metod.
Obsługa tej metody została usunięta z szyn 3.2.
Metoda, której użyłeś (ActiveRecord::FinderMethods#find) nie jest przestarzała.
FWIW, myślę, że zamieszanie jest z metodami 'find_by_xxx'. Myślę, że były one przestarzałe w Railsach 4. –
'find' jest pierwszą metodą wymienioną w ActiveRecord [Przewodnik po Railsach] (http://guides.rubyonrails.org/active_record_querying.html#retrieving-a-single-object), więc myślę, że można bezpiecznie powiedzieć to wciąż droga. –
Czy widzisz przestarzałe w RubyMine? Jeśli tak, to jest znany i zgłoszony błąd: https://youtrack.jetbrains.com/issue/RUBY-17979 –