【Rails】findメソッドについて

rails

こんにちは!てくてーくです。

今回はRailsのメソッドでよく使用されるfindメソッドをまとめてみました。

記事を作成した目的

Webアプリを作成中にfindメソッドを使おうと思い備忘録として記録します。またこの記事が誰かの役に立てれば幸いです。

findメソッドとは

まずはこのメソッドは何なのでしょうか。これはデータベースからオブジェクトを取り出すために用いるメソッドです。データベースからオブジェクトを取り出すメソッドは他にもいくつもありそれぞれにオブジェクトの取り出し方が違っていて、用途によって使いわかけることができます。

その他のメソッドについては下のリンクをご覧ください。

Railsガイド

findメソッド

findメソッドを詳しくみていきましょう。

findメソッドの特徴

findメソッドは以下に掲げる特徴があります。

  • 主キーに対応するレコードを取り出す
  • 主キーを複数指定することも可能
  • 主キーが見つからない場合は例外を返す

順番にみていきましょう。

主キーに対応するレコードを取り出す

findメソッドを使うと与えられたどのオプションにもマッチする主キーに対応するオブジェクトを取り出すことができます。下に例を示します

#主キー(id)が2のユーザーを検索
pry(main)> user = User.find(2)
=>id: 2,
  name: "Gregory Waelchi"

ユーザーテーブルの中から主キー(id)が2のレコードを検索しています。

これと同じSQLは以下の通りです。

SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 2], ["LIMIT", 1]]

主キーを複数指定することも可能

findメソッドは主キーを複数指定して取り出すこともできます。以下に例を示します。

#主キー(id)が1と2のユーザーを検索
pry(main)> user = User.find(1,2)
=>id: 1, name: "komu" id: 2, name: "Gregory Waelchi"

ユーザーテーブルの中から主キー(id)が1と2のレコードを取り出しています。

ではもっとたくさんの主キー(id)を指定することはできるのでしょうか。

#主キー(id)が1,2,3,4,5,6のユーザーを検索
pry(main)> user = User.find(1,2,3,4,5,6)
=>id: 1,
name: "komu"
id: 2,
name: "Gregory Waelchi"
id: 3,
name: "Darrell Beahan"
id: 4,
name: "Oran Bosco"
id: 5,
name: "Angelita Barrows"
id: 6,
name: "Ms. Dedrick Lesch"

できました。6つの主キーを指定しましたが全てを取り出してくれましたね。どうやら主キーをいくつ指定しても問題はないようです。

主キーが見つからない場合は例外を返す

最後に主キーが見つからない場合をみていきましょう。今回は存在しない主キーを探してどのように返ってくるかみてみます。

#主キー(id)が1000のユーザーを検索(存在しないユーザー)
pry(main)> user = User.find(1000)
ActiveRecord::RecordNotFound: Couldn't find User with 'id'=1000

 

このようにfindメソッドで渡された主キーの中にどのレコードにもマッチしない主キーが1つでもあると例外(ActiveRecord::RecordNotFound)が発生します。

まとめ

  • 主キーに対応するレコードを取り出す
  • 主キーを複数指定することも可能
  • 主キーが見つからない場合は例外を返す

findメソッドは主キーを使ってオブジェクトを取り出すメソッドですので他のキーによりオブジェクトを取り出す際は他のメソッドが必要になるでしょう。

 

コメント