Method: Tagalong::Tagger::InstanceMethods#tags_matching

Defined in:
lib/tagalong/tagger.rb

#tags_matching(search_phrase, limit = nil) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/tagalong/tagger.rb', line 84

def tags_matching(search_phrase, limit = nil)
  if Tagalong.sunspot_enabled?
    tmp_tagger_type = self.class.to_s # this is needed because self.class apparently changes inside the Sunspot.search scope.
    tag_search = Sunspot.search(Tagalong::TagalongTag) do
      fulltext "\"#{search_phrase}\""
      with :tagger_id, self.id
      with :tagger_type, tmp_tagger_type
      order_by(:number_of_references, :desc)
      paginate(:page => 1, :per_page => limit) if limit
    end
    tag_search.results.map { |r| { :name => r.name, :number_of_references => r.number_of_references } }
  else
    if limit
      self.tagalong_tags.order("number_of_references DESC").where("name like ?", ["%#{search_phrase}%"]).limit(limit).map { |r| { :name => r.name } }
    else
      self.tagalong_tags.order("number_of_references DESC").where("name like ?", ["%#{search_phrase}%"]).map { |r| { :name => r.name } }
    end
  end
end