7

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

will_paginate2.3.16Rails2.3.14を使用しています。

4

2 に答える 2

10

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

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

このルートは、コントローラーのアクションと一致する可能性のあるルートよりもに定義してください。さらに良いことに、次のように index アクションを除外します。

map.resources :lists, :except => [:index]
于 2012-06-15T23:38:43.340 に答える
2

ここにはいくつかのオプションがあります。

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

于 2012-06-15T23:35:35.197 に答える