Я работаю над формой поиска, которая имеет два различных входа: есть 1) поле поиска и несколько вариантов выбора из раскрывающегося списка и 2) несколько кнопок с предустановленными фильтрами.
Первый (поле поиска и раскрывающиеся списки) - это компонент, который представляет собой форму со всеми параметрами поиска и фильтрации внутри нее.
<%= c :filter, :search, query_params: @table.query_params %>
<div class="row">
<div class="col-xs-12 col-md-3">
<%= c :table_filter, :select,
[
name: :status,
options: status_select_box(),
operator: "eq",
table: @table
]
%>
</div>
<% end %>
Второй, предустановленные фильтры, располагаются над полем поиска и отображают количество результатов, которые они вернут @count
, и фильтр при нажатии, основанный на параметрах, переданных их назначениям @path.
На странице поиска:
<%= render "_btn.html",
[
path: search_path(@conn, :index, %{mode: "eq:filter"}),
count: @count,
label: "Filter 1"
]
%>
_btn.html.eex
<%= link to: @path, class: "btn" do %>
<%=
#this is pusdo code for the button, there is a bit more logic to
how it is displayed but essentially it just shows a label and the count
@label @count
%>
<% end %>
Обе эти формы работают нормально, проблема в том, что если кто-то щелкнет один из предустановленных фильтров, параметры не сохранятся, если они выберут раскрывающийся список. Мне интересно, какой самый краткий способ гарантировать, что параметры запроса будут сохраняться между двумя формами.