Marioosh's developer diary RSS ICON Polish version

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.

Kategoria: Programowanie         Tagi: Rails Activerecord
Komentarze możliwe dzięki: Disqus