Я использую act_as_taggable_on для пометки в наших проектах, а также sunspot/solr для поиска.
Получаем странный неожиданный результат. Сначала наша установка (короткая версия):
Модель:
Class Person
has_many :projects
searchable do
string :project_tags, :multiple => true do
projects.map { |p| p.tag_list}.flatten
end
end
Taglist — это метод из act_as_taggable_on, который возвращает массив тегов для каждого проекта (например, ["foo", "bar"]). Мы индексируем теги проекта для участников проекта.
Когда в нашем контроллере мы делаем:
Person.search() do
with(:project_tags).any_of(params[:tags])
end
Это возвращает нужных людей. Все идет нормально.
Проблема
Нам нужна возможность поиска по нескольким тегам. Итак, в соответствии с инструкциями по солнечным пятнам, мы передаем массив. Код выглядит примерно так:
@tags_array= params[:tags].split(/ /)
Person.search() do
with(:project_tags).any_of(@tags_array)
end
Теперь Sunspot в результате дает нам каждого человека, независимо от того, какие теги мы используем! Мы как сумасшедшие тестировали это в консоли, но не можем понять, где мы ошибаемся.
Будем признательны за любую помощь!
Эрвин