Ruby on rails RubyonRails通过多个参数过滤页面结果,并将参数保存到下一页

Ruby on rails RubyonRails通过多个参数过滤页面结果,并将参数保存到下一页,ruby-on-rails,ruby,Ruby On Rails,Ruby,基本上我有4个控制器:一个带有产品,一个带有此产品的类别,一个用于管理城市,一个用于将数据分发到前端(包含静态页面,主要逻辑是过滤显示结果) 目前,我的目标是同时按城市和类别筛选我的产品。我已经完成了将参数传递到url并在控制器中处理它们的基本解决方案 /main/home.html.erb/ <%- City.all.each do |city|%> <%= link_to city.name, url_for(category: params[:category],

基本上我有4个控制器:一个带有产品,一个带有此产品的类别,一个用于管理城市,一个用于将数据分发到前端(包含静态页面,主要逻辑是过滤显示结果)

目前,我的目标是同时按城市和类别筛选我的产品。我已经完成了将参数传递到url并在控制器中处理它们的基本解决方案

/main/home.html.erb/
<%- City.all.each do |city|%>
    <%= link_to city.name, url_for(category: params[:category], city: city.name)%>
<% end %>

<% Category.all.each do |category| %>
<%= link_to category.name, root_path(category: category.name, city: params[:city]) %>
这是进行过滤,但在我被重定向到另一个页面后,我必须再次选择我的城市。如何为会话保存它? 是否有更合适的解决方案来处理此任务?
我该怎么做才能让它工作


提前谢谢。

您可以使用
会话

  if !params[:city].blank?
    session[:current_city] = params[:city] 
    @city_id = City.find_by(name: params[:city]).id
    @offers = Offer.where(city_id: @city_id).where(category_id: @category_id).order("created_at DESC").paginate(page: params[:page], per_page: 4)
  end

  if !params[:category].blank?
    session[:current_category] = params[:category]
    @category_id = Category.find_by(name: params[:category]).id
    @offers = Offer.where(category_id: @category_id).where(city_id: @city_id).order("created_at DESC").paginate(page: params[:page], per_page: 4)
  end 
然后在下一个控制器中:

params[:city] = session[:current_city] unless params[:city].present?
params[:category] = session[:current_category] unless params[:city].present?

之后,您可以使用params[:city]和params[:category]的相同方式

嘿,这很有效!以前尝试过会话,但如我现在看到的,被一些小的语法错误抓住了。非常感谢。PS:对于那些将执行此任务的人,我进一步用会话变量替换了所有GET请求中的参数我将我的“城市选择”替换为主布局,这迫使我更新我的选择,例如:params[:city],:action=>“home”%>。希望这能对其他人有所帮助,因为我花了很多时间来处理。
params[:city] = session[:current_city] unless params[:city].present?
params[:category] = session[:current_category] unless params[:city].present?