太阳黑子搜索有很多关联

时间:2014-11-25 13:41:24

标签: ruby-on-rails sunspot

我不知道如何使用太阳黑子来搜索has_many关联。用户从select_tag字段中选择技能,结果返回与skill_ids匹配的记录。

只是为了记录,当我按下搜索按钮时,我得到了回复:

SOLR Request (294.1ms)  [ path=select parameters={fq: ["type:User"], q: ["4"], fl: "* score", qf: "", defType: "edismax", start: 0, rows: 30} ]

q: ["4"]提到数字4,这是我搜索的技能的ID。当我想要回来的时候,我没有得到任何结果。当我提交没有参数时,我确实将所有用户作为结果返回。

到目前为止我所做的和想到的可以在下面找到。非常感谢任何有关正确方向的提示或帮助。

(如果您需要任何其他信息,请告诉我,我会马上添加)

我的结构如下:

在用户模型中(user.rb)

  has_many :user_skills, dependent: :destroy
  has_many :skills, through: :user_skills

  searchable do
    integer :skill_ids, :multiple => true do
      skills.map(&:id)
    end
  end

在技能模型中(skill.rb)

  belongs_to :user
  has_many :user_skills
  has_many :users, through: :user_skills

  searchable do
    integer :id, :multiple => true
  end

数据库架构:

t.string   "name"
t.string   "category"
t.string   "slug"

在User_skills模型中(user_skill.rb)

  belongs_to :user
  belongs_to :skill

数据库架构:

t.integer "user_id"
t.integer "skill_id"

在我的搜索控制器中,我有以下代码段:

@search = Sunspot.search(User) do
  fulltext params[:s_skills]
end

@users = @search.results

params [:s_skills]是从select_tag中提取的skill_ids:

<%= select_tag :s_skills, options_for_select(Skill.all.collect{|e| [e.name,e.id]}, skills), {:id => 'e2', :multiple => true, :placeholder => "Input skills", class: "input-search2" } %>

获取技能名称并返回其ID。

1 个答案:

答案 0 :(得分:1)

您实际上并未搜索已编入索引的skill_ids字段。

您必须添加以下内容:

User.search do
   fulltext params[:free_text]   #<-- YOU DON'T NEED THIS, PROBABLY?
   with(:skill_ids, params[:s_skills]) if params[:s_skills]
end