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
Другие вопросы по тегам