2015-04-26 2 views
1

Этот вопрос задавался несколько раз раньше и отвечал, но ни одно из предложений, похоже, не работает в моем случае.Rails 4 и Sunspot: поиск по нескольким родственным моделям

У меня есть модель пользователя и модель Micropost

Пользователь имеет много microposts, 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 how to search multiple models correctly? All examples online fail

, но это не работает. Все, что мне нужно, - это поиск атрибута содержимого микросоты выше. Поэтому, если человек ищет пользователя, он получает пользователя, если они ищут определенную фразу, которая встречается в 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 
+0

К сожалению, я получаю эту ошибку «неопределенный метод' MODEL_NAME»для # <Веснушка :: Поиск :: StandardSearch: 0x007fa64e187648>» – GhostRider

+0

Если у вас есть существующие данные в БД сделать обязательно запустите 'rake sunspot: solr: reindex' для индексации. Для новых данных индексирование будет выполняться с помощью крючка. @GhostRider, перед «индексированием» перезагрузите ваш сервер. – Emu

Смежные вопросы