Rails自定义will_paginate路由

9

如何在自定义路由中使用will_paginate?

我的路由设置如下:

map.connect 'human-readable/:name', :controller => :tags, :action => 'show'

但据我所知,will_paginate使用url_for,但我想使用“人类可读”的URL而不是url_for,请问如何实现? 编辑 当我点击由will_paginate生成的分页链接时,它使用的是:
"tags/show?name=Elektronikindustri&page=1"

替换为:

"/human-readable/show?name=Elektronikindustri&page=1"

我希望will_paginate能够使用我自定义的路由而不是实际的控制器名称。

当我点击will_paginate生成的分页链接时,它使用的是tags/show?name=Elektronikindustri&page=1而不是'/human-readable/show?name=Elektronikindustri&page=1' - 我该如何更改这个?'human-readable'在我的路由文件中像这样: map.connect 'human-readable/:name', :controller => :tags, :action => 'show'我希望will_paginate使用我的自定义路由而不是实际的控制器名称。 - kristian nissen
3个回答

9
will_paginate视图助手有一个:params选项,用于覆盖默认的链接生成。
更改您的路由配置:
map.human_readable_tag '/human-readable/:name', 
     :controller => :tags, :action => 'show'

按照以下方式调用will_paginate视图助手:

<%= will_paginate @tag_list, 
     :params => {:controller => human_readable_tag_path(@tag_name) } %>

请确保您在控制器中设置了@tag_name变量。
有关更多信息,请阅读will_paginate视图帮助文档
传递给辅助程序的:params选项用于调用url_for。因此,请阅读url_for文档,以了解我们是如何伪造控制器名称的。

6
另一种选择是在will_paginate中使用param,但是像这样传递参数:
<%= will_paginate @products, :params => {:controller => 'human-readable', :action => 'show', :name => 'xyz'} %>

现在您的链接将看起来更像可读性强的链接,例如:/xyz?page=2...。此功能可以提高用户体验,并且不会影响到HTML标签的保留。

0

你需要定义这个路由


map.connect 'human-readable/:name', :controller => :tags, :action => 'show'
map.connect 'human-readable/:name/page/:page', :controller => :tags, :action => 'show'


非常感谢,我该如何让will_paginate识别它?它仍在使用“标签”吗?当我点击分页链接时,它仍在使用“标签”,而不是“易读”的方式。 - kristian nissen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接