12

我有一个自定义 will_paginate 渲染器,它覆盖 WillPaginate::ViewHelpers::LinkRenderer 的链接方法,如下所示:

   def link(text, target, attributes = {})
      "<a href='/users/95/friends_widget?page=#{target}' rel='next' data-remote='true'>#{text}</a>"
   end

...而且效果很好,除了您可以在该链接中看到硬编码的 95。如何通过 Rails 视图将参数(例如用户或用户 ID)传递到自定义渲染器?

<%= will_paginate(@user_friends, :remote => true, :renderer => FriendsRenderer) %>

还是我缺少一些东西,一些更简单的方法?

顺便说一句:@user_friends 在自定义渲染器中不可用,我已经尝试在 will_paginate 调用的末尾添加参数,例如:user => user)

4

2 回答 2

23

will_paginate lets you pass in :params for the links:

will_paginate(@user_friends, :params => { :user_id => 95 })
于 2012-08-01T10:09:23.040 回答
4

看法:

<%= will_paginate @user_friends, :renderer => 'FriendsRenderer',
                         :remote => true,
                         :link_path => friends_widget_user_path(@user) %>

class FriendsRenderer < WillPaginate::LinkRenderer
  def prepare(collection, options, template)
    @link_path = options.delete(:link_path)
    super
  end

protected
  def link(page, text, attributes = {})
    # Here you can use @link_path   
  end
end

请注意,这适用于 will-paginate 版本:2.3.6

于 2011-07-26T18:25:39.870 回答