Rails3: как передать параметр в пользовательский рендеринг will_paginate?

У меня есть собственный рендерер 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) %>

Или я что-то упускаю, какой-то более простой способ сделать это?

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


person yalestar    schedule 26.07.2011    source источник


Ответы (2)


Вид:

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

person Arun Kumar Arjunan    schedule 26.07.2011
comment
привет, пожалуйста, проверьте мое требование здесь stackoverflow.com/questions/23755799/ . Пожалуйста помогите - person santosh; 22.05.2014

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

will_paginate(@user_friends, :params => { :user_id => 95 })
person Henrik N    schedule 01.08.2012
comment
Знаете ли вы какой-либо способ передать переменную вместо целого числа? Например, значение text_field? - person Gokhan Arik; 02.01.2015
comment
@GokhanArik Что ты имеешь в виду? Вы должны быть в состоянии сделать will_paginate(@user_friends, :params => { :anything => "hello" }), и тогда ссылки на страницы будут выглядеть примерно так: /friends?page=2&anything=hello. Затем страница друзей может установить значение текстового поля на params[:anything], если захочет. - person Henrik N; 03.01.2015
comment
Вместо приветствия я хочу передать значение f.text_field. Это возможно? Вы можете посмотреть вопрос, который я разместил - stackoverflow.com/questions/27747939/ - person Gokhan Arik; 04.01.2015