前提
内容は浅いですが、個人学習中の備忘録を目的として残しておきます。
モデル.find
User.find(1)
findメソッドで取得する値は、DBに存在している前提で実行されるため、値が存在しない場合は、ActiveRecord::RecordNotFound
という例外が発生する。
用途
必ず該当する値が存在しなくてはいけないモデルに対して使う。
万が一、存在しない場合は例外が発生するため、例外処理も実装しておく必要がある。
モデル.find_by
User.find_by(email: 'example@aaa.com')
find_byメソッドは、該当する最初の値が取得されるが、値が存在しない場合は例外を発生させずnilを返す
用途
あらかじめ、値が存在しないケースがあると判断できている場合に使う。
find_byとwhereについて
User.find_by(email: 'example@aaa.com')
User.where(email: 'example@aaa.com')
上記の例は、アドレスのようにアプリ上で一意な値を取得したい場合、find_byメソッドの方を使うことが有効的。
whereメソッドを使うと、全てのデータを見て該当する値を全取得するメソッドのため、無駄な処理を走らせてしまうので、一意な値を取得する場合などは、最初に該当する値を見つけた時点で処理が終了するfind_byメソッドを使うことがよさそう。