Rails 4 и Sunspot: поиск по нескольким связанным моделям
Этот вопрос задавался несколько раз и отвечал, но ни одно из предложений не работает в моем случае.
У меня есть модель User и модель Micropost
У пользователя много микросообщений, у микросообщений один пользователь.
Я пытаюсь выполнить поиск по пользовательской модели и модели микросообщений одновременно, используя Sunspot.
Все, что мне нужно, это правильный синтаксис для индексации моделей.
Я попробовал это:
class User < ActiveRecord::Base
searchable do
text (:full_name)
text (:last_name)
text (:first_name)
text (:email)
text (:job_title)
text (:city)
text (:country)
text (:address)
text (:tag_list)
text (:content ) { micropost.content }
end
end
На основе
sunspot solr как правильно искать несколько моделей? Все примеры онлайн провалились
но это не работает Все, что мне нужно, это поиск атрибута содержимого микросообщений выше. Таким образом, если человек ищет пользователя, он получает пользователя, если он ищет конкретную фразу, встречающуюся в micropost.content, он получает микросообщение с этой фразой.
Насколько я понимаю, документация не помогает в этом.
1 ответ
Ваша модель USER должна быть такой:
class User < ActiveRecord::Base
searchable do
text (:full_name)
text (:last_name)
text (:first_name)
text (:email)
text (:job_title)
text (:city)
text (:country)
text (:address)
text (:tag_list)
end
end
Ваша модель MICROPOST должна быть такой:
class Micropost < ActiveRecord::Base
searchable do
text (:content)
end
end
Затем в вашем файле search_controller.rb:
@search = Sunspot.search(User, Micropost) do |query|
query.fulltext params[:quick_search]
end
@results = @search.results
затем для каждого результата создайте цикл:
@results.each do |result|
if result.is_a?(User)
//do something with the result
end
if result.is_a?(Micropost)
//do something with the result
end
end