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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
where (:conditions) having (:conditions) select group order limit offset joins includes (:include) lock readonly from |
Natomiast zniknęły takie metody jak :
1 2 3 4 5 6 |
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
1 2 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:
1 2 |
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.
.