Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】findについて

f:id:kina_kq:20210417080502j:plain

 

昨日参加したRails勉強会でfindfind_byについての理解が全く足りてなかったので、

今日のブログでfindとはなんぞやということをまとめていきたいと思います。

 

今回の内容としては、

1.  findメソッドについて

2.  findメソッドとfind_byメソッドの違いについて

の2本柱でお送りします。

 

findについて

 

findはmodelの検索機能の1つです。

 データベースのテーブルからモデルオブジェクトとして取り出す場合にRailsのfindメソッドを使います。

 

 

使い方と具体例

 

f:id:kina_kq:20210417081358p:plain

 

 findを使えば、これらのテーブルのid, name, numberを簡単に調べることが出来ます。

 

 それではターミナルで、

rails console」を使って確認してみましょう。

 

f:id:kina_kq:20210417081840p:plain

 

この画面になるはずです。

短縮形の「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を返します。

 

❏ ここまでのまとめ

 

 

f:id:kina_kq:20210417084607p:plain

 

<おまけ >whereについて

 

whereは与えられた条件に一致するレコードを

すべて返します。

 

NOT条件

AND条件

OR条件

 を使って、自分が求めているレコードを取得することが出来ます。

 

条件に一致しなかったとき、

ActiveRecord_Relationクラスを返します。

空の配列ではありません。

 

 

参考

 

Railsのfindメソッドがすぐ分かる!find_byとの違い…|Udemy メディア

【Rails】find・find_by・whereについてまとめてみた - Qiita