Rails3: How to pass param into custom will_paginate renderer?
Asked Answered
A

2

12

I've got a custom will_paginate renderer that overrides WillPaginate::ViewHelpers::LinkRenderer's link method like so:

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

...and that works great, except you can see the hard-coded 95 in that link. How would I pass a parameter (e.g. user or user's ID) into the custom renderer via the Rails view?

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

Or is there something I'm missing, some easier way to do it?

BTW: @user_friends isn't available in the custom renderer, and I've already tried just adding params onto the end of that will_paginate call, e.g. :user => user)

Aaron answered 26/7, 2011 at 18:12 Comment(0)
K
4

View:

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

Note that this works for the will-paginate version: 2.3.6

Kreiker answered 26/7, 2011 at 18:25 Comment(1)
hi please check my requirement here #23756299 . Please help meProphylactic
U
23

will_paginate lets you pass in :params for the links:

will_paginate(@user_friends, :params => { :user_id => 95 })
Unsatisfactory answered 1/8, 2012 at 10:9 Comment(3)
Do you know any way to pass variable instead of integer? For example, value of a text_field?Ling
@GokhanArik What do you mean? You should be able to do will_paginate(@user_friends, :params => { :anything => "hello" }) and then the pagination links will be something like "/friends?page=2&anything=hello". Then the friends page could set the value of a text field to params[:anything] if it wants to.Unsatisfactory
Instead of "hello", I want to pass value of f.text_field. Is that possible? You can look at the question I posted - #27748439Ling
K
4

View:

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

Note that this works for the will-paginate version: 2.3.6

Kreiker answered 26/7, 2011 at 18:25 Comment(1)
hi please check my requirement here #23756299 . Please help meProphylactic

© 2022 - 2024 — McMap. All rights reserved.