Rails3: Как передать параметр в пользовательский make_paginate renderer?

У меня есть настраиваемый визуализатор 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?

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

Или есть что-то, что мне не хватает, какой-то более простой способ сделать это?

BTW: @user_friends недоступно в пользовательском рендерере, и я уже пробовал просто добавлять параметры в конец этого вызова will_paginate, например.: user = > user)

Ответ 1

Вид:

<%= 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

Обратите внимание, что это работает для версии с паузой: 2.3.6

Ответ 2

will_paginate позволяет передавать :params для ссылок:

will_paginate(@user_friends, :params => { :user_id => 95 })