will_paginate页面链接问题
我目前有一个评论模型,在微博下发布,两者都显示在同一页面上。 问题是两者都显示在同一页面上,并且两者都是分页的,我正试图用facebook方法进行微观测量。 以下是以下问题:
两个分页的链接变成这个href="/users/2?page=2"
而不是href="/users/2/micropost?page=2"
或者href="/users/2/comment?page=2"
。 我不确定如何解决这个问题。 这是我的一些代码。 所有建议都非常感谢!
Micropost渲染HTML
评论部分HTML
<div id='CommentContainer-' class='CommentContainer Condensed2'>
问题在于为每个页面创建URL的will_paginate方式(它与jQuery没有任何关系)。
通过设计,will_paginate会尽力猜测页面用户的基本URL是什么(在内部它使用控制器/动作来执行此操作)。 然后将该基本URL与传递给will_paginate助手的任何额外参数组合使用:params
和succesive页码。
目前(will_paginate 3.0.3),为了覆盖此默认行为,您需要编写自定义LinkRenderer类。 下面是这样一个类的例子 – 它使用了新的额外选项:base_link_url
,可以传递给will_paginate视图助手。 然后在创建分页链接时将传递的字符串用作基础。 如果:base_link_url
选项未传递,则它将回:base_link_url
默认行为。
将以下类放在某个地方,rails可以在加载时找到它(例如/ lib,前提是你已经将/ lib添加到application.rb
的自动加载路径):
# custom_link_renderer.rb class CustomLinkRenderer < WillPaginate::ActionView::LinkRenderer def prepare(collection, options, template) @base_link_url = options.delete :base_link_url @base_link_url_has_qs = @base_link_url.index('?') != nil if @base_link_url super end protected def url(page) if @base_link_url.blank? super else @base_url_params ||= begin merge_optional_params(default_url_params) end url_params = @base_url_params.dup add_current_page_param(url_params, page) query_s = [] url_params.each_pair {|key,val| query_s.push("#{key}=#{val}")} if query_s.size > 0 @base_link_url+(@base_link_url_has_qs ? '&' : '?')+query_s.join('&') else @base_link_url end end end end
用法:
# in your view will_paginate collection, :renderer => CustomLinkRenderer, :base_link_url => '/anything/you/want'
现在回到你的案子。 这时你可能会看到解决方案 – 你可以在一个页面上有两个带有不同基本URL的will_paginate小部件,为这两个提供不同的:base_link_url
选项。