ransackでの検索機能で複数カラムからand検索をしたいです。とりあえずデータベースを描きます(カラムが多いので必要なところ以外は省きます)
Characterっていうテーブルにしてあります。
id | 名前 | prefecture1 | prefecture2 | prefecture3 |
---|---|---|---|---|
1 | 相沢 | 神奈川 | 東京 | 愛知 |
2 | 井上 | 岐阜 | 愛媛 | 北海道 |
3 | 伊沢 | 東京 | 沖縄 | 長崎 |
4 | 上野 | 神奈川 | 東京 | 北海道 |
5 | 菊池 | 東京 | 長崎 | 沖縄 |
みたいのが永遠と続いています。
ここでprefectureによる絞り込みをしたいと思い
①とりあえず一つの都道府県で絞り込む
def index @q = Character.ransack(prefecture1_or_prefecture2_or_prefecture3_eq: "東京") @characters = @q.result(distinct: true).order(id: :desc) end
問題なくprefecture1~3に東京を持つ人のみに絞り込めました。これは成功です
がしかしもう少し高度な条件で絞り込みたいので②に行きます。(これも成功します。失敗は③です)
②複数の都道府県を使い"or"検索で絞り込む
def index @q = Character.ransack(prefecture1_or_prefecture2_or_prefecture3_eq_any: ["東京","北海道"]) @characters = @q.result(distinct: true).order(id: :desc) end
これも問題なく東京を持つ人もしくは北海道を持つ人(要するにor検索)に絞り込めました。
次にand検索です
③複数の都道府県を使い"and"検索で絞り込む
def index @q = Character.ransack(prefecture1_or_prefecture2_or_prefecture3_eq_all: ["東京","愛知"]) @characters = @q.result(distinct: true).order(id: :desc) end
期待としては都道府県に東京と愛知をもつ相沢に絞り込めると嬉しかったのですが検索結果は0になりました。
ここで何がいけないのか原因を突き止めるため_allが正常に動くか以下のようにして試してみました
def index @q = Character.ransack(name_cont_all: ["相","沢"]) @characters = @q.result(distinct: true).order(id: :desc) end
これは名前に相をもちかつ沢ももつ人への絞り込みです。(要するに相と沢のand検索)しっかり相沢のみに絞り込めました→allは正常に動いている
or と _all を同時に使うと検索結果が0になってしまします。
一応苦肉の策としては都道府県を一つにまとめて(相沢なら神奈川愛知東京)cont_allをすれば行けるとは思うのですがどうもしっくりきません。or と _allは同時に使えない。そーゆうもんなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。