John Lauck
2007-Apr-26 21:50 UTC
Remote pagination using pagination_links, link_to_remote and url_for
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 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---