Find czy Where?
Wraz z pojawieniem się Rails 3 - ActiveRecord dość mocno się zmieniło. Zniknęło kilkanaście metod, któr dość często były wykorzystywane w ich miejsce pojawiły się inne:
where (:conditions)
having (:conditions)
select
group
order
limit
offset
joins
includes (:include)
lock
readonly
from
Natomiast zniknęły takie metody jak :
find(:all, :limit => 1)
find(:all)
find(:first)
first(:conditions => {:name => "Jaś"})
all(:joins => :products)
Metody, które najczęściej służyły do wyszukwiania w bazie rekordów nie zostały przeterminowane i dalej są dostępne w Rails 3
find(1)
find(1,2,3)
Nasuwa się pytanie, której metody powinniśmy używać? find czy where,
przecież ten sam efekt uzyskamy gdy użyjemy:
Item.find(283746)
jak i:
Item.where(:id => 283746).first
Pomiędzy tymi dwoma formułkami jest jedna subtelna różnica, w przypadku
gdy szukamy rekordu, którego nie ma w bazie, użycie where zwróci nam
nil. Użycie find natomiast rzuci błąd ActiveRecord::RecordNotFound
i przerwie wykonywanie dalszego kodu. Jeżeli tego błędu nie wyłapiemy to
pojawi się nam wspaniały stacktrace na ekranie.
Miejmy to na uwadze.