2011-03-10 64 views
0

這是我的路線軌道3:將分頁創建不正確的鏈接

match "/search/*keywords" => "public/search#index" ,:method=>:get, :as=>:search_with_keywords  

一個例子可能是「/搜索/國家印度/產品類型,mobilephones」

正在使用將分頁創建分頁鏈接
的* /關鍵字,同時創建分頁鏈接

<%= will_paginate @results, :container => false, :class => 'pagination ajax' %> 

生成的鏈接是「導致以下問題HTTP://本地主機:3000 /搜索關鍵詞=國家 - 印度%2Fproduct_type-mobilephones & LANG = EN &頁= 2"

我想是的「http://本地主機:3000 /搜索/國 - 印度/產品類型,mobilephones?LANG = EN &頁= 2"

我怎樣才能做到這一點?

回答

2

如果你使用了Rails 3版本將分頁(目前的 「3.0.pre2」),那麼您可以使用:renderer選項並自定義鏈接的生成方式。

首先,如果您不是最新的,那麼您可以按照安裝說明和will paginate wiki中的使用說明進行操作。

然後在lib,您可以創建自己的渲染覆寫鏈接生成,或許像

class SearchLinkRenderer < WillPaginate::ViewHelpers::LinkRenderer 

    protected 

    def url(page) 

    @base_url_params ||= begin 
     url_params = base_url_params 
     merge_optional_params(url_params) 
     url_params 
    end 

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

    @template.search_with_keywords_url(url_params) 
    end 
end 

,然後用

<%= will_paginate @results, :container => false, :class => 'pagination ajax', :renderer => SearchLinkRenderer %> 

把它的默認渲染器使用

@template.url_for(url_params) 

這是什麼是「搞亂」你的鏈接。你可以使用@template的任何路徑,所以

@template.search_with_keywords_url(url_params) 

應該做的伎倆。現在,如果您使用自己的渲染器調用will_paginate,則應該使用您的路徑而不是url_for,並且參數應該很好地匹配。如果他們沒有,然後檢查什麼url_params正在設置,並與您的路線匹配器進行比較。

可能有一個更簡單的方法來覆蓋這個,但這看起來很簡單,並且與will_paginate期望您如何定製其輸出一致。我發現Rob Anderton有一篇關於定製will_paginate here的文章,所以他們可以提供更多的見解。

2

您可能也有興趣使用Kaminari作爲替代will_paginate for Rails 3.我通過Railscast發現它,並且能夠快速有效地將它集成到我的應用程序中。我還發現,在切換後,我的應用程序的體積縮小了,性能也有了明顯的提高。