Quando chiamo un find con un id, esso diventa un find mirato e genera un errore RecordNotFound.Come emettere un 'find' o 'where' che genera un RecordNotFound
Foo::Bar.find(123) # RecordNotFound if no Bar with id 123 exists.
Ma quando chiamo che con condizioni, ottengo nullo se non trovato:
Foo::Bar.find(:first, :conditions => [ "lower(name) = ?", name.downcase ])
Voglio una ricerca quali condizionale per generare un errore troppo. So che posso fare:
Foo::Bar.find_by_name!("CocktailBar") #=> raises Recordnotfount if not not found.
Ma questo ha solo condizioni davvero semplici. Il mio ha bisogno di un po 'più di complessità; in realtà qualcosa di simile:
Foo.Bar.select{ |pm| pm.name.downcase =~ /cocktail/}.first
E, se non viene trovato nulla, desidero che venga generato l'errore RecordNotFound. È possibile? O dovrei semplicemente aggiungere del codice per verificare contro nil? e se nullo? alzare l'errore me stesso? E se sì, come faccio a farlo in Rails 3?
mai saputo circa la 'prima' metodo, grazie per averlo menzionato. – bricker
@lulalala Grazie per aver esteso la mia risposta. Non mi sono preoccupato di menzionare i metodi 'find_by' perché l'autore della domanda dice esplicitamente che li conosce e la domanda non è abbastanza su questo. – RocketR
@RocketR L'ho appena realizzato in menzionato in questione ora. Immagino di concentrarmi sul titolo della domanda. – lulalala