【问题标题】:Ruby on Rails filtering page result by multiple params and save parameters to the next pageRuby on Rails 通过多个参数过滤页面结果并将参数保存到下一页
【发布时间】:2015-07-29 08:53:51
【问题描述】:

基本上我有 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]) %>

在主控制器中,我有类似 Home 操作的内容:

def home
  @city = City.all
  @offers = Offer.all
  @category = Category.all

  if !params[:city].blank? 
    @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?
    @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 
end

这就是过滤,但是在我被重定向到另一个页面后,我必须再次选择我的城市。如何为会话保存它? 是否有更合适的解决方案来处理此任务?
我应该怎么做才能让这件事发挥作用?

提前谢谢你。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您可以使用session

      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], :行动 => '家'%> 。希望这对其他人有所帮助,因为我花了很多时间来处理。
    猜你喜欢
    • 1970-01-01
    • 2019-12-25
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多