| Module | ActiveRecord::Acts::Taggable::SingletonMethods |
| In: |
lib/acts_as_taggable_on_steroids_will_paginate.rb
|
Paginación para el resultado de una llamada a find_tagged_with. Parámetros:
# File lib/acts_as_taggable_on_steroids_will_paginate.rb, line 25
25: def paginate_by_tag(tags, options = {})
26: page, per_page, total = wp_parse_options(options)
27: offset = (page.to_i - 1) * per_page
28: options = options.delete_if {|k, v| [:page, :per_page, :total_entries].include?(k)}
29: options.merge!(:offset => offset, :limit => per_page.to_i)
30: items = find_tagged_with(tags, options)
31: tags_for_count = tags.collect {|t| "\'#{t}\'"}.join(', ')
32: count = tagging_counts(tags_for_count, options)
33: returning WillPaginate::Collection.new(page, per_page, count) do |p|
34: p.replace items
35: end
36: end
Devuelve el número de veces que este modelo ha sido taggeado con este Tag
# File lib/acts_as_taggable_on_steroids_will_paginate.rb, line 10
10: def tagging_counts(comma_separated_tags, options={})
11: # Hack!
12: conditions = " "
13: conditions << "(#{options[:conditions]}) AND " if options[:conditions]
14: taggable_table = name.tableize
15: count_by_sql("select count(distinct taggable_id)
16: FROM tags, taggings, #{taggable_table}
17: WHERE #{conditions} " + sanitize_sql(["(#{Tag.sanitized_name_columns.collect {|c| "#{c} IN (#{comma_separated_tags})"}.join(' OR ')})
18: AND tags.id = taggings.tag_id AND taggings.taggable_type = :name AND #{taggable_table}.id=taggings.taggable_id", {:name => name}]))
19: end