friendly_id网址不适用于分页。

时间:2017-04-27 05:41:15

标签: ruby-on-rails friendly-id

我正在对现有源代码实施friendly_id。场景是这样的。主页上有category个名称。当用户单击这些“类别”链接中的任何一个时,如果该类别下的产品具有该页面,则会将其带到页面。这个页面有分页。在实施category_id=number之后,之前的网址已经过friendly_id了,我将网址设为category_id=name

旧网址:

localhost:3000/search?category_id=208

新网址:

localhost:3000/search?category_id=name此网址已分页。

问题是,当我点击此网址上的第二页时,它仍然具有相同的旧网址,其ID号如下所示。

localhost:3000/search?category_id=208&page=2

我知道我错过了什么。有人可以告诉我如何解决这个问题。以下是我的控制器。 (它非常混乱。那就是当你尝试在现有代码上实现新的东西时会发生什么。)请检查它有@equipments的行的末尾是否有分页。如果需要更多信息,请告诉我。

控制器

def search_equipments

    begin      
      if (params.keys & ['category_id', 'sub_category', 'manufacturer', 'country', 'state', 'keyword']).present?
        if params[:category_id].present?
          @category = Category.active.friendly.find_by_friendly_id params[:category_id]
        else
          @category = Category.active.friendly.find_by_friendly_id params[:sub_category] if params[:sub_category].present?
        end
        @root_categories = Category.active.roots
        @sub_categories = @category.children.active if params[:category_id].present?
        @sub_categories ||= {}
        @countries = Country.active.all
        @manufacturers = Manufacturer.active.all
        @states = State.active.where("country_id = ?", params[:country]) if params[:country].present?
        @states ||= {} 
        unless params[:category_id].present? && params[:sub_category].present?
          params[:category_id] = @category.id if params[:category_id].present?
          params[:sub_category] = @category.id if params[:sub_category].present?
        end   
        @equipments = Equipment.active.filter(params.slice(:manufacturer, :country, :state, :category_id, :sub_category, :keyword)).order("#{sort_column} #{sort_direction}, created_at desc").page(params[:page]).per(per_page_items)               
      else
        redirect_to root_path
      end
    rescue Exception => e
      render :file=>"#{Rails.root}/public/404.html",:status=>404
    end    
  end

3 个答案:

答案 0 :(得分:1)

如果你正在使用kaminari,你应该在你的视图文件中有类似下面的内容来呈现页面链接/数字:

<%= paginate @equipments, params: request.query_parameters.merge(category_id: @category.slug) %>

答案 1 :(得分:1)

您可以在GROUP BY paginate helper内尝试此操作 要获取查询参数,您可以在该请求中设置slug。

答案 2 :(得分:0)

我认为您需要传递category_id而不是传递slug,而是相应地更改filter()

@equipments = Equipment.active.filter(params.slice(:manufacturer, :country, :state, :category_id, :sub_category, :keyword)).order("#{sort_column} #{sort_direction}, created_at desc").page(params[:page]).per(per_page_items)

希望有所帮助!