Railsのfindメソッドがすぐ分かる!find_byとの違いも即理解

Railsのfindメソッドがすぐ分かる!find_byとの違いも即理解

Ruby on Rails(以下Rails)のfindメソッドについて、Rails初心者でもわかるように、具体的なソースコードを用いながら解説していきます。

Railsのfindメソッドは、主にデータベースとのやり取りをする時に使用するメソッドです。RailsでWEBプログラミングなどをする時には、ほぼ必ず使用することになるでしょう。

本記事では、Rails findメソッドとは何か・findメソッドの使用例について述べています。

また、よくある疑問として挙げられる、Rails findメソッドとfind_byメソッドの違いにも触れていきます。

本記事を読み終える頃には、Rails findメソッドの基礎が完璧に理解できているでしょう。ぜひ最後までお読みください。

Rails findについて

Railsのmodel(モデル)は、データベースからデータを取り出したり、検索したりするための強力な機能を備えています。

Rails findは、modelの検索機能の1つであると理解してください。

※Railsのmodelを学習したい人は、modelについて解説された記事をご覧ください。

データベースのテーブルから、モデルオブジェクトとしてレコードを1つ取り出す場合に、Railsのfindメソッドを使います。(以下より具体例で解説していきます。)

例えば、日用品を扱うデータベースのテーブルは以下のようなものをイメージしてください。

データベースのテーブルの例

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

Rails findの使い方

ここでは、Rails findの使い方を具体例と共に解説していきます。

例えば、サッカーチームのメンバーを扱うMemberモデルに、以下のようなテーブルがあったとします。

id name number
1 Taro 10
2 Kei 7
3 Nana 14

Rails findを使えば、上記のテーブルのidやname, numberを簡単に調べることができます。

Rails find及びmodelの機能を簡単にチェックするには、Railsコンソールを使うのが便利です。

ターミナルで「rails console」または省略形の「rails c」を実行してください。

すると、以下のようになります。

taro $ rails console

・・・

irb(main):001:0>

ここから、Rails findメソッドを使っていきます。

 

Rails findでidを指定する

findメソッドに、idカラムの値を指定すると、その値を持つレコードを取り出すことができます。

例えば、idが3のレコードを取り出して、変数memberに入れる場合は、以下をターミナルに打ち込みます。

※rails consoleを実行してから打ち込んでください。

irb(main):001:0>member = Member.find(3)

・・・

=>#<Member id: 3, name: “Nana”, number: 14 >

#<Member id: 3, name: “Nana”, number: 14>

という結果が返ってきました。これにより、idが3のレコードの情報を取り出すことができました。

 

Rails findで属性を取得する

次に、テーブルにあるnameとnumberを取得してみましょう。このnameとnumberは属性と呼ばれています。

例として、idが3のnameとnumberを取り出してみます。

上記で作成した、変数memberに対して、カラムと同名の属性を指定すると、そのカラムの値が返ります。

上記で実行したターミナルの続きに以下のコマンドを打ち込んでみます。

irb(main):002:0>member.name

=>”Nana”

irb(main):003:0>member.number

=>14

テーブルで、確かにid3のnameは”Nana”、numberは14ですね。

Rails findで、属性を取得することができました。

 

Rails findとfind_byの違い

Railsにはfindメソッドによく似たものとして、find_byメソッドというものがあります。

この2つの違いについて解説します。

Rails find_byは、あるカラムを使ってレコードを検索し、最初に一致したものを返します。

例えば、nameカラムが「Kei」であるレコードを1つ取り出します。引数には、「name: “Kei”」のようにハッシュで「カラム名: 値」を指定します。

以下のコマンドをターミナルに打ち込みます。

【Rails find_byの具体例】

※rails consoleを実行してから打ち込んでください。

irb(main):001:0>member = Member.find_by(name: “Kei”)

=> #<Member id: 2, name: “Kei”, number: 7 >

一見findメソッドと同じように見えますが、find_byメソッドでは、find_by(id: 値)のような使い方はしません。

また、findメソッドで、find(name: 値)のような使い方もしません。findはidのみを引数に取ります。

これがRails findメソッドとfind_byメソッドの違いです。

以下でfindとfind_byの違いをまとめておきます。

【Rails findとfind_byの違い】

・findメソッド⇒引数に取るのはid(属性は取らない)

・find_byメソッド⇒引数に取るのは属性(idは取らない)

この違いは非常に重要なので、必ず覚えておきましょう。

 

いかがでしたか?Rails findメソッドを理解できましたか?

繰り返しになりますが、RailsでWEBプログラミングをする時には、findメソッドを必ずと言っていいほど使用します。使い方を忘れてしまった時は、ぜひ本記事を読みなおしてRails findメソッドを思い出してください。