findメソッドとfind_byメソッド(とwhereメソッド)の違い
アプリ作成中に出会ったfindメソッドとfind_byメソッドについて、何が違うのか、どうやって使えばいいのかを調べたので記録しておきます。
●findメソッドとfind_byメソッド(とwhereメソッド)の違い
・findメソッド・・・idを検索キーとしてデータを取得するメソッド。id以外の条件では検索不可。idの値がわかっていてそのデータを取得したい場合に使う。
<例>
Client.find(1)
・find_byメソッド・・・与えられた条件にマッチする値のうち最初の値だけを取得する。条件は複数指定できるが、取得できる値は1つだけ。
<例>
Client.find_by first_name: ‘Elly’
✳︎条件に一致した値を複数取得したい場合→whereメソッドを使う。
・whereメソッド・・・条件を文字列、配列、ハッシュのいずれかの方法で与えると、条件に一致したすべての値を取得することができるメソッド。検索機能を実装するときにも使用。
<例>
Client.where(first_name: ‘Elly’)
◉結論
・違いは大きく分けて2つ。一つ目は、指定できる条件がidのみかそれ以外も複数指定できるかどうか。2つ目は取得したい結果がひとつか複数か。
・findメソッドはidが分かっていて、複数の値を取得したい時に使用し、find_byメソッドはidが分からない、もしくは複数の条件で検索したい時に使用。条件も複数で指定したいし検索結果の値も複数ほしいという場合はwhereメソッドを使用。
参照:Railsガイド