Railsでレコードからデータを取り出す方法

こんにちは!

今回はRailsでレコードからデータを取り出す方法についてまとめます。

クラスメソッド

findメソッド

member = Member.find(3)
  • idでレコードを取り出す(idカラムから検索)
  • 存在しないidを指定すると例外が発生する

find_byメソッド

member = Member.find_by(name: "Taro")
  • 指定したカラムから最初に一致したレコードを取り出す
  • 一致するレコードがない場合は、nilが返る

クエリ―メソッド

  • 検索条件をわかりやすく記述するためのもの
  • ActiveRecord::Relationクラスのオブジェクト(リレーションオブジェクト)を返す

リレーションオブジェクトと検索タイミング

  • リレーションオブジェクトは検索条件を保持しているだけであり、検索は実行されない
  • 実際に何かメソッドが呼び出されたときにSQL検索が実行される
  • 保持している検索条件を表示するにはto_sqlメソッドを使用する

その他の特徴

  • クエリ―メソッドを重ねて呼び出すことで検索条件を追加できる
  • クエリ―メソッドの順番は自由

クエリ―メソッド: where

  • 検索条件に一致する複数のレコードを取り出す
    • find_byの場合は1件だけ取り出すという違いがある

ハッシュ(カラム名: 値)で指定

members = Member.where(name: "Taro")
  • nameカラムから"Taro"に一致するレコードを全て取り出す

文字列で指定

members = Member.where("age < 20")
  • ageカラムが20以下のレコードを全て取り出す
  • 検索条件を文字列で指定できる

文字列+プレースホルダーで指定

members = Member.where("name = ?", 'Taro')
  • nameカラムから"Taro"に一致するレコードを全て取り出す

ハッシュ(カラム名: 配列)で指定

members = Member.where(age: [10, 15, 20])
  • ageカラムが10, 15, 20のいずれかに一致するレコードを全て取り出す

ハッシュ(カラム名: 範囲オブジェクト)で指定

members = Member.where(age: 1..9)
  • ageカラムが1以上9以下のレコードを全て取り出す

notを付けて検索

members = Member.where.not("age > 10")
  • ageカラムが10未満のレコードを全て取り出す

おわりに

今回はRailsでレコードからデータを取り出す方法についてまとめました。スコープについて勉強しているときに、クエリ―メソッドの文法が怪しかったので復習しました。スコープはとても便利なのでこちらについてもまたまとめようと思います。

55/100