2012-06-13 11 views
6

will_paginateリンクを/list?page=1の形式から/list/page/1に変更しようとしています。私はこのための経路を正しく設定しましたが、will_paginateは私のきれいなURLスタイルではなく、リンクでクエリ文字列を使用しています。そうでなければそれを伝える方法?will_paginateのURLを変更するには?

私はwill_paginate 2.3.16とRails 2.3.14を使用しています。

答えて

9

will_paginateはurl_forヘルパーを使用します。使用するパラメータを含むルートを定義すると、かなりのURLが生成されます。

map.connect '/lists/page/:page', :controller => 'lists', :action => 'index' 

あなたはこのルートにも、あなたのコントローラのアクションに一致する可能性が上記のいずれかのルートを定義し、確認してください。さらに良い場合は、次のようなインデックスアクションを除外してください:

map.resources :lists, :except => [:index] 
+1

ありがとうございます。私はちょうど私のルートが台無しになった!あなたの答えをありがとう、ここには恩恵があります – babonk

+3

'map.connect'は' match '/ list/page /と呼ばれます:page' => 'lists#index''。あなたが間違っているならば、私を訂正してください.Dレールを新入社員にしてください。 – ksugiarto

+0

あなたは正しいです。私はタイプミスを修正しました。 – iblue

1

現在地いくつかのオプションがあります。

第一オプション:モンキーパッチWillPaginate::ActionView::LinkRenderer#url、現在、以下のURLのロジックがあります。

def url(page) 
    @base_url_params ||= begin 
    url_params = merge_get_params(default_url_params) 
    merge_optional_params(url_params) 
    end 

    url_params = @base_url_params.dup 
    add_current_page_param(url_params, page) 

    @template.url_for(url_params) 
end 

だから、私はあなたの代わりに"/list/page/#{page}"ような何かを行うことができますことを想像します。

もう1つの方法はレンダラーを(WillPaginate::ViewHelpers::LinkRendererのサブクラス化によって)完全に実装し、will_paginateを呼び出すときに:renderer => MyRendererClassとして提供することです。

関連する問題