LoginSignup
5
3

More than 5 years have passed since last update.

Ruby on Railsにおけるwhere,find,find_byの性質

Last updated at Posted at 2018-12-13

find    -「データベースから検索」-

モデル.find(引数)
・引数にはIDのみが入りうる。
・返り値として、指定したモデルの中の引数に合致したインスタンスを出す。
・取得したいデータのIDがわかっているとき使用できる。
・引数のところに配列が入ることで、複数のIDを指定してデータベースから複数のデータを引き出すことができる。

例1

Book.find(3)
Bookモデルの中からIDが3のデータを取得する。

例2


Book.find([2,4])
Bookモデルの中からIDが2,4のデータを配列で返す。

find_by  -検索条件を指定して(IDではなくてもよい)最初の1件を取得-

モデル.find_by(条件)
・条件に当てはまるモデルを検索する。
・条件はID以外のカラムを用いて指定することができる。
・返り値として、指定したモデルの条件に合致するインスタンスを出す。複数合致した場合はそれらの中の一番最初のものを返り値とする。
1件だけインスタンスを取得するときにのみ使用できる。

例1


Book.find_by(author: Edogawa)
==>Nisendouka
Bookモデル全体から、authorがEdogawaであるインスタンスのうち最初の1件を返す。

例2


Book.find_by(author: Edogawa, Published: 1951)
==>Geneijo
Bookモデル全体から、authorがEdogawaであり、Publishedが1951であるインスタンスのうち最初の1件を返す。

where  -検索条件を指定して(IDではなくてもよい)該当するデータ全て取得-

モデル.where(条件)
・条件に当てはまるインスタンスを検索する。
・該当するデータ全てを取得する。しかし、戻り値は配列ではなく、ActiveRecord::Relationというオブジェクトとなる。インスタンスではないため、.whereで取得したデータをそのまま使用することができない。


Book.where(author: Edogawa).first
==>Nisendouka
Bookモデル全体から、authorがEdogawaであるという条件で絞り込む。その中で一番最初のインスタンスを取り出す。
5
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3