findとfind_byの違い
findとfind_byの違い
[findメソッド]
@board = Board.find(1) ``` 上記のように[find]メソッドは、idを条件にした時にのみ使える。(該当するidのものを全て取得する。) また、該当するものが見つからない場合は例外(RecordNotFound)が発生する。 下記のようにリストでidを指定して、複数検索をして配列を得ることもできる。 ``` @board = Board.find(1, 2, 3, 4)
[find_byメソッド]
@board = Board.find_by(title: "rails学習")
上記のように[find_by]メソッドは、特定のカラムを指定して使える。(特定の条件に該当する最初のデータを取得する。取得できるデータは、1件のみ。同じデータが複数ある場合は、順序などが重要になるので[order]メソッドなどを使って工夫する。) 複数のデータを特定の条件で取得したい場合は、[where]メソッドを使う。 また、該当するものが見つからない場合はfalseを返す。
※ポイント
[find]も[find_by]もテーブルから特定の条件のデータを取得するカラムなので、下記のようにレシーバがモデル以外でも使える。
@board = current_user.boards.find(params[:id])
参考記事:
しっかり使い分け!Railsでのfind, find_byの違い、使い方 | 侍エンジニアブログ https://udemy.benesse.co.jp/development/system/rails-find.html
ActiveRecord::RecordNotFoundのエラーメッセージを翻訳する - Qiita