2017-04-27 8 views
0

私はfriendly_idを既存のソースコードに実装しています。シナリオはこのようなものです。ホームページにはcategoryという名前があります。ユーザーがこれらのカテゴリリンクのいずれかをクリックすると、そのカテゴリの下に商品があるときにページに移動します。このページには改ページがあります。以前のURLはfriendly_idを実装した後にcategory_id=numberを持っていましたが、私はcategory_id=nameというURLを取得しました。friendly_id urlがページネーションに適用されていません。

旧URL:

localhost:3000/search?category_id=208

新しいURL:

localhost:3000/search?category_id=nameこのURLはページネーションを持っています。

問題は、このURLの2番目のページをクリックしても、以下のようなID番号の古いURLが残っていることです。

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

私は何かが欠けています知っています。誰かが私にこれを解決する方法を教えてもらえますか?以下は私のコントローラです。 (既存のコードに新しいものを実装しようとすると何が起こるか)@equipmentsの改行の終わりを確認してください。必要な情報があれば教えてください。私が代わりに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) 

役立ちます希望を作成する必要があると思う

コントローラ

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

+0

テンプレートでは、<%= search_equipments_path(:category_id => category.slug)%> 'を渡しています。これは次のページをクリックする前にうまくいきます。次のページをクリックします。その古いURLに戻る。 – user3576036

+0

'' @ equipment'の直上で 'param [:category_id] = @ category'を渡すと、friendly_idは今カテゴリのページ設定に取り組んでいます。しかし、サブカテゴリではありません。 – user3576036

1

をあなたはその後、クエリパラメータを取得するためにpaginate helperparams: request.query_parameter 内にこれを試すことができますその要求にslugを設定することができます。

関連する問題