はじめに
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検索
それではこの基本形と比較して条件を定義してやる方法を組み合わせてやってみましょう。
できない、できない、できないと色々と試してみてできたのがこちら。
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])
みなさんの探し物が見つかりますように!
参考サイト