【回答】findとfind_byとwhereの違いについて
問題
findとfind_byとwhereの違いについて説明しなさい。
回答
返り値が異なる
- findとfind_byはモデルのオブジェクトを返す
- whereはActiveRecord::Relation(配列みたいなもの)を返す
検索結果が無かった時の挙動が異なる
- findはActiveRecord::RecordNotFoundを返す(すなわち、エラーとなる)
- find_byはnilを返す
- whereはActiveRecord::Relation[](空の配列みたいなもの)
参考
例えば、Taskテーブルに1つだけ(id=1だけ)レコードが登録されている状態で、id=2のデータを取得しようとすると、findの場合、以下のエラーとなる。
whereの場合、空の配列のようなものを返すのでeachで値を取り出す処理であってもエラーとならずにすみます(結果が表示されないだけ)
ちなみにwhere(id: 2).firstのように最初の値を取ろうとするとnilとなります。
参考URL
Ruby on Rails - 0件のDBの検索における「ActiveRecord::RecordNotFound」について|teratail
ActiveRecord の find と where の違い。 - Qiita
Active Recordの色々なメソッドの返り値 - Qiita
回答
【回答】findとfind_byとwhereの違いについて - 迷い人