0

想要轻松搜索所有关联的模型属性之前问过这个问题仍然存在:

轮廓模型

has_one :match

searchable do
  integer       :id
  string        :country
  string        :state
  string        :city
end

匹配模型

belongs_to :profile

searchable do
  integer :id
  string :looking_for_education do
   match.looking_for_education
  end      
  integer :age_from
  integer :age_to
end

ProfilesController#Index

def index

  @search = Sunspot.search Profile do

    with(:country, params[:country]) # this is a profile attribute
    with(:state,   params[:state])   # this is a profile attribute   
    with(:looking_for_education, "high school") # this should search *inside* 
                                                #the match attribute's, 
                                                #where **match** belongs_to 
                                                #**profile**
  end

  @profiles = @search.results

end

编辑#1

使用 :looking_for_education do 块重写可搜索块,就像在第一个答案建议中一样。仍然以未定义的方法“looking_for”失败#

在索引中添加了整数 :id 仍然是相同的问题 :(

4

2 回答 2

1

问题是您试图同时搜索 BOTH ProfileMatch但模型被索引为单独的文档并且Sunspot.search Profile do只搜索Profile文档。

您需要配置文档以在一个文档中包含您需要的所有信息。一种方法是制作Profile包含所有信息的文档:

class Profile
  has_one :match

  searchable do
    string :country
    string :state
    string :city
    string :looking_for_education do
      match.looking_for_education
    end
  end
于 2013-10-18T01:41:40.270 回答
0

解决方案:

我终于找到了问题,我的开发数据库中有一些问题,其中 Profile 没有匹配。+ 匹配表中缺少一些 profile_id,修复这些后,重新索引就正常了。

于 2013-10-18T08:29:13.547 回答