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。
谢谢帮助,但它确实表明我既相匹配的IDS的记录。例如,如果我搜索Ruby和Java,那么当我想要查看具有Ruby和Java技能的用户时,它向我展示了具有Ruby或Java技能的用户。有没有办法来调整它? – 2014-11-25 14:28:22
固定。我只是使用“all_of”。太感谢了 – 2014-11-25 15:06:29