Django では、ORM にはget()
、モデルの単一のインスタンスのみを返すために使用される関数が呼び出されます。具体的には、1 つだけを期待していたときに複数のオブジェクトが返された場合に例外が発生するため、特定のルックアップ (つまり、「このスラッグで 1 つの記事を見つける」) に最適です。
Rails/ActiveRecord で同じ動作をする類似の関数を見つけることができませんでした。これまでのところ、次のようなコードを書いています。
Model.where( ... ).first
しかし、これにより、オブジェクトの複数のインスタンスが返されるというサイレント バグが発生しました。これは、非常に悪い、あいまいな状況です。
Active Record Query Interface ガイドには、単一のオブジェクトを取得する 5 つの方法がリストされており、最も有望な方法find()
をfind_by()
探していますが、複数のオブジェクトが検索条件に一致する場合、いずれの方法も例外を発生させません。
where()
自分で記述してクエリを実行し、返されたオブジェクトの数を確認するだけでよいことはわかっていfind_by()
ますが、このコードはコードベースのいたるところに表示され、そのような面倒なことはすべて追加したくありません。また、これが Rails/ActiveRecord のどこかに組み込まれることを期待するような一般的で一般的なニーズのようにも思えます。
これらの状況を見つけやすくするために欠けている機能はありますか? Rails 4 と Ruby 2.0 が役立つ場合は、それを使用しています。