我不知道如何使用太阳黑子来搜索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。
答案 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