1 ページで複数の Ransack 検索フォームを使用する
概要
1 つのページで複数の search_form_for を使用していますが、渡されたパラメーターに問題があります。フォームの 1 つが送信されると、そのパラメータは他のフォームのパラメータをオーバーライドします。
たとえば、送信時にこれが必要です:
Parameters: {"q"=>{"search_cont"=>"qwerty", "by_discarded"=>"discarded"}, "f"=>{"search_cont"=>"asdfgh", "by_discarded"=>"active"}}
しかし、それを取得します
Parameters: {"q"=>{"search_cont"=>"qwerty", "by_discarded"=>"discarded"}}
あるいはそれ
Parameters: {"f"=>{"search_cont"=>"asdfgh", "by_discarded"=>"active"}}
ビュー:
<%= search_form_for @q, url: url, as: :q do |f| %>
<%= f.search_field :search_cont, value: params.dig(:q, :search_cont), placeholder: 'Search' %>
<%= f.select(:by_discarded, [['Active', 'active'], ['Discarded', 'discarded']], { selected: params.dig(:q, :by_discarded) }, { onchange: 'this.form.submit();' }) %>
<% end %>
...
<%= search_form_for @f, url: url, as: :f do |f| %>
<%= f.search_field :search_cont, value: params.dig(:f, :search_cont), placeholder: 'Search' %>
<%= f.select(:by_discarded, [['Active', 'active'], ['Discarded', 'discarded']], { selected: params.dig(:f, :by_discarded) }, { onchange: 'this.form.submit();' }) %>
<% end %>
コントローラ:
@q = some_items.ransack(params[:q])
@q.sorts = 'sort_order asc' if @q.sorts.empty?
@pagy_q, @objects_q = pagy(@q.result, page_param: :page_q)
@f = another_items.ransack(params[:f], search_key: :f)
@f.sorts = 'sort_order asc' if @f.sorts.empty?
@pagy_f, @objects_f = pagy(@f.result, page_param: :page_f)
いずれかのフォームを送信するときに、すべてのフォームからパラメータを渡すにはどうすればよいですか?
解決策
いくつかのオプションがあります。