2014-11-25 99 views
0

我不明白我如何使用太阳黑子来搜索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"]提到这是我搜索的技能的ID数4。当我想要找回某些东西时,我得不到任何结果。当我提交时没有参数,我确实让所有用户返回结果。

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

(请让我知道如果你需要任何其他信息,我将它添加马上)

我的结构如下:

在用户模式(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 

DB模式:

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

在User_skills模型(user_skill.rb)

belongs_to :user 
    belongs_to :skill 

DB模式:

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

你实际上并没有在你已经索引的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 
+0

谢谢帮助,但它确实表明我既相匹配的IDS的记录。例如,如果我搜索Ruby和Java,那么当我想要查看具有Ruby和Java技能的用户时,它向我展示了具有Ruby或Java技能的用户。有没有办法来调整它? – 2014-11-25 14:28:22

+0

固定。我只是使用“all_of”。太感谢了 – 2014-11-25 15:06:29