前提・実現したいこと
地域・ジャンル・タグ(collection_select_boxesを用いた配列で検索する形)の3つの条件でタグが登録されたレストランを絞り込み検索するというアプリを作成しています。
ransackを用いた検索で、collection_select_boxesを用いた検索条件において「選択した条件が全て含まれている(選択したタグ以外が存在してもOK)レコード」を絞り込みたいです。
発生している問題
ビューヘルパーの述語を"_in"にしたところ「選択した条件のいずれかが含まれているレコード」という条件になってしまいます。
しかし、他に配列を扱えそうな述語が公式リファレンスに見当たらないというところで詰まっています。
該当のソースコード
○ビューファイル
ruby
1 <%= search_form_for @p, url: shops_path do |f| %> 2 ~~ 3 <div class="search-form-title"><%= f.label :shop_tag_relations_tag_id_in, 'こだわり条件' %></div> 4 <div class="col-md-4 checkbox-list"> 5 <%= f.collection_check_boxes :shop_tag_relations_tag_id_in, Tag.all, :id, :name %> 6 ~~ 7 <div class="search-button"><%= f.submit '検索',{class: 'submit-button'} %></div> 8 <% end %>
○コントローラー記述
ruby
1 def index 2 @genres = Genre.all 3 @prefectures = Prefecture.all 4 @tags = Tag.all 5 @p = Shop.ransack(params[:q]) 6 @results = @p.result(distinct: true) 7 end
検索条件のshop_tag_relationsテーブルはshopsテーブルとtagsテーブルを他対他で繋いでいる中間テーブルです。
Tagモデルから選択肢のデータを参照し、shop_tag_relationsテーブルのtag_idカラムに検索をかけるという形で実装をしています。
試したこと
述語をcont_allにしてみるなどしましたが、どうやら配列を扱うことができない述語のようで、選択したタグの数が1つだと問題なく動作するのですが、複数個選択(パラメーターが複数のパラメータを持った配列になる形となると)検索結果が0件になってしまいます。
補足情報(FW/ツールのバージョンなど)
rails6
docker環境
お力添え頂けると幸いです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー