blinking bear
2007-May-23 06:24 UTC
Solution: Getting will_paginate and acts_as_taggable to play nice
I''m using both will_paginate <http://errtheblog.com/post/4791> and acts_as_taggable plugins on the app <http://www.themotherhood.net/> I''m working on. The tagged results need to be paged just like other lists. Here''s my hack to get the two to work together: RAILS_ROOT/lib/paginated_tags.rb in lib: module ActiveRecord module Acts #:nodoc: module Taggable #:nodoc: module SingletonMethods def find_tagged_with(list,*args) #build the limit sql options = args.last.is_a?(Hash) ? args.pop.symbolize_keys : {} limit,offset = options.delete(:limit), options.delete(:offset) unless options.empty? scope = (limit && offset) ? "LIMIT #{offset}, #{limit}" : "" find_by_sql([ "SELECT #{table_name}.* FROM #{table_name}, tags, taggings " + "WHERE #{table_name}.#{primary_key} = taggings.taggable_id " + "AND taggings.taggable_type = ? " + "AND taggings.tag_id = tags.id AND tags.name IN (?) #{scope}", acts_as_taggable_options[:taggable_type], list ]) end #will_paginate will call find_all_tagged_with alias find_all_tagged_with find_tagged_with end end end end I can now call a method like this: @stories = Story.paginate_tagged_with("goo", :total_entries => 2, :page => params[:page]) You have to manually pass in the total_entries, but hacking the code where total_entries is set in the will_paginate finder method could get around this. - Nathan Verni --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---