idを持つfindを呼び出すと、それはターゲットのfindになり、エラーRecordNotFoundがスローされます。RecordNotFoundを発生させる 'find'または 'where'を発行するには
Foo::Bar.find(123) # RecordNotFound if no Bar with id 123 exists.
しかし、私は見つからなかった場合の条件で、私はnilを取得することを呼び出します。
Foo::Bar.find(:first, :conditions => [ "lower(name) = ?", name.downcase ])
私もエラーを発生させるために、このような条件検索をしたいです。私は私ができることを知っています:
Foo::Bar.find_by_name!("CocktailBar") #=> raises Recordnotfount if not not found.
しかし、それは本当に単純な条件があります。私のものはもう少し複雑です。実際には次のようになります。
Foo.Bar.select{ |pm| pm.name.downcase =~ /cocktail/}.first
そして、何も見つからない場合は、RecordNotFoundエラーを発生させます。それはまったく可能ですか?または、単にnilに対してチェックするコードを追加する必要がありますか?とnilなら?自分自身でエラーを起こす?もしそうなら、それをRails 3でどうすればいいですか?
は '最初のを知っていたことはありません
Foo::Bar.find_by_name!(name)
例えば方法は、同様find_by法のために存在する同等の強打、'方法、それに言及してくれてありがとう。 – bricker@lulalala私の答えを延長してくれてありがとう。私は 'find_by'メソッドについては気にしませんでした。なぜなら、質問の著者は明示的に彼がそれらを知っていると言っていて、質問はこれに関するものではないからです。 – RocketR
@RocketR私はちょうど今述べたところでそれを実現しました。私は質問のタイトルに集中していたと思う。 – lulalala