module ActsAsTaggableOn::Taggable::Related::InstanceMethods

Public Instance Methods

matching_contexts_for(search_context, result_context, klass, options = {}) click to toggle source
# File lib/acts_as_taggable_on/acts_as_taggable_on/related.rb, line 44
def matching_contexts_for(search_context, result_context, klass, options = {})
  tags_to_find = tags_on(search_context).collect { |t| t.name }

  klass.select("#{klass.table_name}.*, COUNT(#{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key}) AS count")               .from("#{klass.table_name}, #{ActsAsTaggableOn::Tag.table_name}, #{ActsAsTaggableOn::Tagging.table_name}")               .where(["#{exclude_self(klass, id)} #{klass.table_name}.#{klass.primary_key} = #{ActsAsTaggableOn::Tagging.table_name}.taggable_id AND #{ActsAsTaggableOn::Tagging.table_name}.taggable_type = '#{klass.base_class.to_s}' AND #{ActsAsTaggableOn::Tagging.table_name}.tag_id = #{ActsAsTaggableOn::Tag.table_name}.#{ActsAsTaggableOn::Tag.primary_key} AND #{ActsAsTaggableOn::Tag.table_name}.name IN (?) AND #{ActsAsTaggableOn::Tagging.table_name}.context = ?", tags_to_find, result_context])               .group(group_columns(klass))               .order("count DESC")
end

Private Instance Methods

exclude_self(klass, id) click to toggle source
# File lib/acts_as_taggable_on/acts_as_taggable_on/related.rb, line 67
def exclude_self(klass, id)
  if [self.class.base_class, self.class].include? klass
    "#{klass.table_name}.#{klass.primary_key} != #{id} AND" 
  else
    nil
  end
end
group_columns(klass) click to toggle source
# File lib/acts_as_taggable_on/acts_as_taggable_on/related.rb, line 75
def group_columns(klass)
  if ActsAsTaggableOn::Tag.using_postgresql? 
    grouped_column_names_for(klass)
  else
    "#{klass.table_name}.#{klass.primary_key}"
  end
end