Ruby on rails RubyonRails通过多个参数过滤页面结果,并将参数保存到下一页
基本上我有4个控制器:一个带有产品,一个带有此产品的类别,一个用于管理城市,一个用于将数据分发到前端(包含静态页面,主要逻辑是过滤显示结果) 目前,我的目标是同时按城市和类别筛选我的产品。我已经完成了将参数传递到url并在控制器中处理它们的基本解决方案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],
/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?