【Rails】findについて
昨日参加したRails勉強会でfindとfind_byについての理解が全く足りてなかったので、
今日のブログでfindとはなんぞやということをまとめていきたいと思います。
今回の内容としては、
1. findメソッドについて
2. findメソッドとfind_byメソッドの違いについて
の2本柱でお送りします。
findについて
findはmodelの検索機能の1つです。
データベースのテーブルからモデルオブジェクトとして取り出す場合にRailsのfindメソッドを使います。
使い方と具体例
findを使えば、これらのテーブルのid, name, numberを簡単に調べることが出来ます。
それではターミナルで、
「rails console」を使って確認してみましょう。
この画面になるはずです。
短縮形の「rails c」でもRails コンソールを実行することができます。
それでは今からfindメソッドを使って調べていきましょう。
findでidを指定します。
❍ findメソッドにidカラムを指定する
findメソッドにidカラムを指定すると、その値のレコードを取り出すことが出来ます。
irb(main):001:0>member = Member.find(3)
・・・
=>#<Member id: 2, Mike: “”, number: 38 >
という結果が返ってきました。
これによりidが2のレコード情報を取り出すことが出来ました。
❍ 属性の取得
次に属性を取り出してみます。
nameとnumberを取り出してみましょう。
変数memberに対して、カラムと同名の属性を指定すると、
そのカラムの値が返ります。
それではやってみます。
irb(main):002:0>member.name
=>”Mike”
irb(main):003:0>member.number
=>38
テーブルで、確かにid2のnameは”Mike”、numberは38ですね。
属性を取得することができました👏👏
❏findまとめ
findは主キーに対応するレコードを取り出すことができます。
主キーを複数指定することも出来ます。
主キーが見つからない場合、例外が発生します( ActiveRecord::RecordNotFound )。
複数キーを指定し、一方が見つからなかった場合も例外が発生します。
Rails findとfind_byの違い
findメソッド→引数に取るのはid(属性は取らない)
findメソッド→引数に取るのは属性(idは取らない)
Rails find_byは、与えられたレコードのうち
最初に一致したものだけ返します。
条件を複数指定することも出来たり、
主キー以外も検索条件にできます。
条件に一致するものがないとき
nilを返します。
条件を複数指定し、1つ以上の条件が満たされなかったとき
同様にnilを返します。
❏ ここまでのまとめ
<おまけ >whereについて
whereは与えられた条件に一致するレコードを
すべて返します。
NOT条件
AND条件
OR条件
を使って、自分が求めているレコードを取得することが出来ます。
条件に一致しなかったとき、
ActiveRecord_Relationクラスを返します。
空の配列ではありません。
参考