条件に当てはまる値を全て取得
適応バージョン
- 3.0.0
- 3.0.5
- 3.0.7
- 3.0.9
- 3.1.0
- 3.2.3
- 3.2.8
- 3.2.13
- 4.0.2
- 4.1.8
- 4.2.1
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.2.1
- 7.0.0
説明
条件に当てはまるレコードを全て取得
使い方
モデル.where(条件..)
例
文字列で指定
Page.where("category_id = '1'")
# SELECT "pages".* FROM "pages" WHERE "pages"."category_id" = 1
ハッシュで指定
Page.where(category_id: 1)
# SELECT "pages".* FROM "pages" WHERE "pages"."category_id" = 1
配列で指定
Page.where(["category_id = ? and url_id = ?", 1, 1])
# SELECT "pages".* FROM "pages" WHERE (category_id = 1 and url_id = 1)
プレースホルダを使用
Page.where("category_id = :category_id", {category_id: params[:category_id]})
複数キーを指定
Page.where(category_id: [1, 2])
# SELECT * FROM pages WHERE (pages.category_id IN (1,2))
NULLのすべてのデータを取得
Page.where(title: nil)
NOT条件
Page.not.where category_id: 1
# SELECT * FROM pages WHERE (pages.category_id != 1)
AND条件
Page.where(category_id: 1).where(user_id: 1)
OR条件
Page.where(category_id: 1).or(Page.where(user_id: 1))
範囲指定
User.where(:id => 1..10)
正規表現
User.where("name like '%hoge%'")
1年
User.where(created_at: '2020-1-5'.in_time_zone.all_year)
1月
User.where(created_at: '2020-1-5'.in_time_zone.all_month)
1日
User.where(created_at: '2020-1-5'.in_time_zone.all_day)
終端なしの範囲指定
User.where(age: 20..)
# SELECT * FROM users WHERE (users.age >= 20)
補足
- 文字列で指定する場合は、SQLインジェクションの脆弱性が発生する可能性があるので、外部入力されるキーに関しては配列やプレースホルダを使用してください