Module: ActsAsTaggableOnPadrino::Taggable::Related::InstanceMethods

Defined in:
lib/acts_as_taggable_on_padrino/taggable/related.rb

Instance Method Summary collapse

Instance Method Details

#matching_contexts_for(search_context, result_context, klass) ⇒ Object



40
41
42
# File 'lib/acts_as_taggable_on_padrino/taggable/related.rb', line 40

def matching_contexts_for(search_context, result_context, klass)
  related_tags_for(search_context, klass).where("#{tagging_table_name}.context = ?", result_context)
end


44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/acts_as_taggable_on_padrino/taggable/related.rb', line 44

def related_tags_for(context, klass)
  tags_to_find = tags_on(context).collect { |t| t.name }

  scope = klass.scoped
  scope = scope.where("#{klass.table_name}.id != ?", id) if self.class == klass # exclude self
  scope.select("#{klass.table_name}.*, COUNT(#{tag_table_name}.id) AS count").
    from("#{klass.table_name}, #{tag_table_name}, #{tagging_table_name}").
    where("#{klass.table_name}.id = #{tagging_table_name}.taggable_id").
    where("#{tagging_table_name}.taggable_type = ?", klass.to_s).
    where("#{tagging_table_name}.tag_id = #{tag_table_name}.id").
    where("#{tag_table_name}.name IN (?)", tags_to_find).
    group(grouped_column_names_for(klass)).
    order("count DESC")
end