Kiedy wywołuję znalezisko o identyfikatorze, staje się ono celem znalezienia i spowoduje błąd RecordNotFound.Jak wydać "Znajdź" lub "Gdzie", które wywołuje RecordNotFound
Foo::Bar.find(123) # RecordNotFound if no Bar with id 123 exists.
Ale gdy zgłoszę, że warunki, mam zero, jeśli nie znaleziono:
Foo::Bar.find(:first, :conditions => [ "lower(name) = ?", name.downcase ])
chcę takiego wyszukiwania warunkowe podniesienie błąd zbyt. Wiem, że mogę:
Foo::Bar.find_by_name!("CocktailBar") #=> raises Recordnotfount if not not found.
Ale to ma tylko naprawdę proste warunki. Mój potrzebuje trochę więcej złożoności; w rzeczywistości coś takiego:
Foo.Bar.select{ |pm| pm.name.downcase =~ /cocktail/}.first
A jeśli nic nie zostanie znalezione, chcę, aby podniósł błąd RecordNotFound. Czy to w ogóle możliwe? Czy powinienem po prostu dodać kod, aby sprawdzić przeciwko zeru? a jeśli zero? sam podnosić błąd? A jeśli tak, jak mam to zrobić w Rails 3?
Nigdy nie wiedział o 'pierwszy' metoda, dzięki za wzmiankę o tym. – bricker
@lulalala Dzięki za przedłużenie mojej odpowiedzi. Nie chciałem wspominać o metodach 'find_by', ponieważ autor pytania wyraźnie mówi, że je zna, a pytanie nie dotyczy tego. – RocketR
@RocketR Właśnie zdałem sobie sprawę z tego we wspomnianym już pytaniu. Sądzę, że skupiałem się na tytule pytania. – lulalala