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

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

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

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

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

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

公開日:2016年7月5日

Rails findについて

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

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

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

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

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

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

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

Udemyで講座を探す >

Rails findの使い方

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

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

idnamenumber
1Taro10
2Kei7
3Nana14

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メソッドを思い出してください。

Udemyおすすめ講座

【入門のひとつ先へ】Ruby on Railsで基本の申し込みフォームを作ろう【現役エンジニアが実践的手法を徹底解説】

【入門のひとつ先へ】Ruby on Railsで基本の申し込みフォームを作ろう【現役エンジニアが実践的手法を徹底解説】

4.3(39 件の評価)

389 人の受験生

作成者: 誠 大波(アプリケーションエンジニア)

「Railsで確認画面"あり"のフォームを作ろう」といわれて具体的な作り方が頭に浮かばなかった方におすすめしたいです。より実践的な開発力を。頻出する各種inputタグの使い方、テストコード、メール送信、非同期処理も学習。Rails 7対応。

\無料でプレビューをチェック!/

講座を見てみる

評価:★★★★★
ちょっとした質問にも非常にレスポンス早く、丁寧にご回答いただき大変貴重な機会となりました。Railsチュートリアルや基本的な書籍では、なかなか遭遇しない実務で実際に使用されるrailsのコードの書き方などを学べました。大変おすすめです。

評価:★★★★★
講義の内容は良かったです。
同じことを異なるケースで何パターンか実行する為、分かりやすく、やるべきことも一通り網羅されていると思います。