Использование сессий вместо параметров URL.
Это более или менее то, что вы можете сделать, извините, если это не совсем работает для вашего случая, просто чтобы дать идею.
# view collectives/index (or whatever you have)
<%= form_tag (controller: :collectives, action: :set_status_filter, method: :post) do %>
<%= select_tag(:session_status_filter, options_for_select(@your_list_of_options_for_the_filter)) %>
<%= submit_tag "Set filter" %>
<% end %>
# collectives controller
def index # or whatever, this is the page containing the form and the list to show
@vendors = Collective.where(sort: 'Vendor').all
if session[:session_status_filter] == # etcetera
then @vendors = @vendors.where(state: session[:session_status_filter]) # for example
else # another option just in case, etcetera
end
end
def set_status_filter # this action is called by the form
session[:session_status_filter] = params[:session_status_filter]
respond_to do |format|
format.html { redirect_to *** the view where the form is placed ***, notice: 'the filter is set to: ....' + session[:session_status_filter] } # after the session variable is set the redirects goes to index which uses the session to filter records
end
end
params[:session_status_filter]
передается формой в collectives#set_status_filter
.Значение используется для установки переменных сеанса.После этого действие collectives#set_status_filter
перенаправляет на индекс или на любую страницу, на которую вы поместили форму и список для отображения.