可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How can I use will_paginate with a custom route?
I have the following in my routes:
map.connect 'human-readable/:name', :controller => :tags, :action => 'show'
but will_paginate uses url_for as far as I can tell, but I want to use 'human-readable' instead of url_for, but how?
Edit
When I click the paging link generated by will_paginate
, it's using:
"tags/show?name=Elektronikindustri&page=1"
Instead of:
"/human-readable/show?name=Elektronikindustri&page=1"
I want will_paginate
to use my custom route instead of the actual controller name
回答1:
The will_paginate
view helper has a :params
option for overriding the default link generation.
Change your routes configuration:
map.human_readable_tag '/human-readable/:name', :controller => :tags, :action => 'show'
Invoke the will_paginate
view helper as follows:
{:controller => human_readable_tag_path(@tag_name) } %>
Make sure you have set the @tag_name
variable in your controller.
For more information read the will_paginate
view helper documentation.
The :params
option passed to the helper is used to invoke url_for
. So read the url_for
documentation for how we faked a controller name.
回答2:
Another option is to use param in will_paginate but passing in the parameter like so:
{:controller => 'human-readable', :action => 'show', :name => 'xyz'} %>
and now your links will look like human-readable/xyz?page=2...
回答3:
You need define this route too
map.connect 'human-readable/:name', :controller => :tags, :action => 'show' map.connect 'human-readable/:name/page/:page', :controller => :tags, :action => 'show'