LoginSignup
2
1

More than 1 year has passed since last update.

whereメソッドで複数条件指定してみた。(boolean真偽値とintegerの比較条件)

Last updated at Posted at 2021-06-14

image.png

はじめに

Whereメソッドで複数条件で事前にフィルターにかけて、
ransackに渡すことをしたく調べたけれどひとつはboolean型の真偽値、ひとつはinteger型の値を比較するand検索が載っている記事がなかったので、色々試してできたので書いておきます。

Whereメソッドの使い方

基本的なWhereメソッドの使い方はこう

Whereメソッド基本形
モデル名.where(カラム名: 条件)

# nameカラムから「yamada_kun」という文字が入っているレコードを全て取得
User.where(name: "yamada_kun")

これでyamada_kunのレコードが取り出せます。


複数条件の基本形はこう(ANDでの検索)

複数条件(AND)
モデル名.where(カラム名: 条件 ,  カラム名: 条件)
#または
モデル名.where(カラム名: 条件).where(カラム名: 条件)

# nameカラムから「yamada_kun」と「ageが20」が入っているレコードを全て取得
User.where(name: "yamada_kun" , age: 20)

User.where(name: "yamada_kun").where(age: 20)



比較するWhereメソッドの書き方はこう

Whereメソッド(比較)
モデル名.where("カラム名 > ?" , 数字 )

# idが10以上のレコードを全て取得
User.where("id > ?", 10)

boolean型とinteger型でAND検索

それではこの基本形と比較して条件を定義してやる方法を組み合わせてやってみましょう。

image.png


Image from Gyazo


あれ、エラーになりました・・・。

できない、できない、できないと色々と試してみてできたのがこちら。

booleanとinteger(比較)でAND検索
モデル名.where("カラム名 条件 and  カラム名 > 数字")

# nameがyamadakunでidが10以上のレコードを全て取得
User.where("name= "yamada_kun" and id > 10)

ちなみに僕がransackを使ってやったコードがこちら

@q = Item.where("onlist = true and stock >=  1").ransack(params[:q])


image.png


みなさんの探し物が見つかりますように!

参考サイト

2
1
0

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
2
1