whereの使い方
■whereの基本形 |
---|
モデル名.where(カラム名: 値)」
User.where(age: 20)
「Userテーブルの中でageカラムが20のレコードを検索」という意味になります。
※複数ヒットすれば複数のレコードを返します。なお、ヒットするidのレコードが見つからない場合は、ActiveRecord_Relationクラスの空配列を返します。
条件の指定(最初のヒットデータ)
モデル名.where(カラム名: 値).first」
User.where(age: 20).first
条件の指定(最後のヒットデータ)
モデル名.where(カラム名: 値).last」
User.where(age: 20).last
条件の指定(選んで取り出す2)
モデル名.where(カラム名: 値).offset 整数」
User.where(age: 20).offset 5
20才のデータを1から5番目までは飛ばして6番目から取り出す
条件の指定(選んで取り出す)
モデル名.where(カラム名: 値).limit 整数」
User.where(age: 20).limit 5
20才のデータを5つ取り出す
条件の指定(並び順)
モデル名.where(カラム名: 値).order(asc/desc)」
User.where(age: 20).order(asc)
asc | 小さいものから順に並べる |
---|---|
desc | 大きいものから順に並べる |
条件の複数指定(AND検索)
# whereの引数には、複数の条件を指定することができます。
User.where(age: 20, sex: 'male', payment: true)
上記は「Userテーブルの中でageが20かつsexがmaleかつpaymentがtrueのレコードを検索」という意味になります。
and | 論理積と呼ばれ、両方がtrueならtrueを返す |
---|---|
falsならor | 論理和と呼ばれ、両方ともfalseならfalseあとは成り立てばtrueを返す |
xor | 排他的論理和。両方が異なる値ならtrue、異なるならfalseを返す |
not | これはこれまでのものと違いnotの後に値を指定するだけ。trueならfalseを示す |
LIKEであいまい検索
# Stringのカラムを指定する場合、指定した文字列を含むレコードを検索することができます。
User.where('email like ?', '%@gmail.com%')
上記は「Userテーブルの中でemailに@gmail.comが含まれるレコードを検索」という意味になります。
% | 任意の0文字以上の文字列 |
---|---|
_ | 任意の1文字 |
ORでいずれかを含む検索
# whereの後に.orをつけることで、条件1または条件2に該当のような検索ができます。※Rails5からの機能です
User.where(family_name: '山田').or(User.where(first_name: '太郎'))
「Userテーブルの中でfamily_nameが山田またはfirst_nameが太郎のレコードを検索」という意味になります。
NOTで否定検索
whereの後に.notをつけることで、条件に当てはまらないレコードを返すようになります。
User.where.not(status: 'reject')
「Userテーブルの中でstatusがreject以外のレコードを検索」という意味になります。
whereの使い方まとめ
基本の条件指定 | 【モデル.where(カラム名: 値)】 |
---|---|
AND検索 | 【モデル.where(カラム名1: 値1, カラム名2: 値2)】 |
あいまい検索 | 【モデル.where('カラム名 like ?', %値%)】 |
否定検索 | 【モデル.where.not(カラム名: 値)】 |