Remote pagination using pagination_links, link_to_remote and


#1

I have two controllers, ‘ads’ and ‘markets’. In the ads controller I
have a
page that shows some partials from the markets view. I could create
partials within the ‘ads’ view and methods in the ‘ads’ controller but
that
seems like i would be out of bounds. Since the markets partials were
identical to some pieces i had already created and I might want to use
this
partial elsewhere in the future, I thought it would be best to keep
markets
with markets.

So now I show a view within ads and I have a partial rendered using
pagination. I want to be able to move from page to page within the list
(and filter it) and ultimately choose a record/row from the list and use
it
within the current view. However, somewhere along the string of method
calls to build the pagination links some method filters out my
:controller
and :action assignments and replaces them with the current values. So
what
should be /markets/min_filter_lookup/?page=2 ends up being
/ads/assign_markets/?page=2 (the current view). The result of course is
an
entire new page/layout being rendered and returned, where I only want
the
partial.

Below is the method I use to generate the remote pagination links. It
started as a method in my application helper that I only used within one
view/controller, but I recently added some additional params/cases to
use it
to handle my current situation. If you look at the code below you can
see I
have one line commented out. I replaced that url_for call with the
actual
url, somewhat hard-coded, and it works. Maybe I don’t understand
url_for.
Maybe it’s a combination of a few methods? (Either way I have a feeling
that the answer is extremely simple)

def pagination_links_remote(paginator, controller = nil, prefix = ‘’)
page_options = {:window_size => 4}
target = prefix.nil? ? ‘filter_by_list’ : “#{prefix}_filter_by_list”
action = prefix.nil? ? ‘filter_lookup’ : “#{prefix}_filter_lookup”

plinks = pagination_links_each(paginator, page_options) do |n|

  if controller.nil?
    options = {
      :url => {:action => action, :params => @params.merge({:page =>

n})},
:update => target,
:before => “Element.show(‘filter_by_activity_indicator’)”,
:success => “Element.hide(‘filter_by_activity_indicator’)”
}
html_options = {:href => url_for(:action => action, :params => @
params.merge({:page => n}))}
else
options = {

:url => url_for(:controller => controller, :action => action,

:params => @params.merge({:page => n})),
:url => “/markets/min_filter_lookup/?page=#{n}”,
:update => target,
:before => “Element.show(‘filter_by_activity_indicator’)”,
:success => “Element.hide(‘filter_by_activity_indicator’)”
}
html_options = {:href => url_for(:controller => controller,
:action
=> action, :params => @params.merge({:page => n}))}
end

  logger.debug "pagination_links html_options: 

#{html_options.inspect}"
logger.debug “pagination_links controller: #{controller.inspect}”
logger.debug “pagination_links prefix: #{prefix.inspect}”

  link_to_remote(n.to_s, options, html_options)
end

if plinks
  "Page: #{plinks}"
else
  ''
end

end

Thanks,

John