will_paginate
リンクをの形式から/list?page=1
に変更しようとしています/list/page/1
。私はこれに適切なルートを設定will_paginate
していますが、私のきれいなURLスタイルではなく、リンクでクエリ文字列を使用しています。それ以外の方法でそれを伝える方法は?
will_paginate2.3.16とRails2.3.14を使用しています。
will_paginate
リンクをの形式から/list?page=1
に変更しようとしています/list/page/1
。私はこれに適切なルートを設定will_paginate
していますが、私のきれいなURLスタイルではなく、リンクでクエリ文字列を使用しています。それ以外の方法でそれを伝える方法は?
will_paginate2.3.16とRails2.3.14を使用しています。
will_paginate はurl_for
ヘルパーを使用します。使用するパラメーターを含むルートを定義すると、きれいな URL が生成されます。
map.connect '/lists/page/:page', :controller => 'lists', :action => 'index'
このルートは、コントローラーのアクションと一致する可能性のあるルートよりも上に定義してください。さらに良いことに、次のように index アクションを除外します。
map.resources :lists, :except => [:index]
ここにはいくつかのオプションがあります。
1 番目のオプション: monkey patch 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 つの方法は、レンダラーを (サブクラス化して) 完全に実装し、will_paginate を呼び出すときと同じようにWillPaginate::ViewHelpers::LinkRenderer
提供することです。:renderer => MyRendererClass