2012-06-13 16 views
6

Próbuję zmienić linki will_paginate z formatu /list?page=1 na /list/page/1. Mam odpowiednie ustawienia tras, ale will_paginate używa ciągu zapytania w linkach zamiast mojego pięknego stylu URL. Jak powiedzieć inaczej?Jak zmienić will_paginate URLs?

Używam: willpaginate 2.3.16 i Railsy 2.3.14.

Odpowiedz

9

will_paginate używa pomocnika url_for. Jeśli zdefiniujesz trasy zawierające parametry, których używasz, powinna wygenerować ładne adresy URL.

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

Proszę się upewnić, zdefiniować tę trasę powyżej żadnych tras, które może również dopasować swoje działania kontrolera. Nawet lepiej: wykluczyć akcję indeksową w następujący sposób:

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

Dzięki. Właśnie spieprzyłem swoje trasy! Dzięki za odpowiedź i oto nagroda – babonk

+3

Teraz 'map.connect' nazywa się' match '/ list/page /: page' => 'list # index''. Anw, pojawia się literówka na twoim 'map.connnect' @iblue, mówiąc tylko, ponieważ ten wpis był dla mnie przydatny: D Proszę mnie poprawić, jeśli się mylę, nowiutcy szyn – ksugiarto

+0

Masz rację. Poprawiłem literówkę. – iblue

1

Masz kilka możliwości:

1-ty opcja: małpa łata WillPaginate::ActionView::LinkRenderer#url, która obecnie posiada następującą logikę 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 

więc sobie wyobrazić, że można zrobić coś jak "/list/page/#{page}" zamiast.

Innym sposobem jest pełne wdrożenie renderera (poprzez podklasy WillPaginate::ViewHelpers::LinkRenderer), a następnie podanie go jako :renderer => MyRendererClass podczas wywoływania will_paginate.