Rails 4和Sunspot:搜索几个相关模型

时间:2015-04-26 17:19:01

标签: ruby-on-rails-4 sunspot multiple-models

之前已经多次询问过这个问题并回答过,但这些建议似乎都不适用于我的情况。

我有一个用户模型和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 个答案:

答案 0 :(得分: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