2017-04-27 92 views
0

我在現有的源代碼上實現了friendly_id。情景就是這樣。主頁上有category名稱。當用戶點擊這些類別中的任何一個鏈接時,當它具有該類別下的產品時,會將它們帶到頁面。此頁面有分頁。在執行friendly_id之後,之前的網址曾經有category_id=number,我的網址爲category_id=namefriendly_id網址不適用於分頁。

舊的URL:

localhost:3000/search?category_id=208

新的URL:

localhost:3000/search?category_id=name此URL分頁。

問題是,當我點擊這個網址上的第二頁時,它仍然具有與下面的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 

回答

1

如果你使用的雷,你應該有類似的呈現頁鏈接/數字視圖文件中的以下內容:

<%= paginate @equipments, params: request.query_parameters.merge(category_id: @category.slug) %> 
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) 

希望幫助!

+0

在模板中,我傳遞了'<%= search_equipments_path(:category_id => category.slug)%>'。所以這在單擊下一頁之前工作正常。當我點擊下一頁時。它回到舊的URL。 – user3576036

+0

如果我在'@ equipments'上方傳遞'params [:category_id] = @ category',那麼friendly_id正在處理分類分頁。但不適用於子類別。 – user3576036

1

你可以試試這個裏面paginate helperparams: request.query_parameter 以獲取隨後查詢參數你可以在該請求中設置slug。