【发布时间】:2015-01-23 13:13:14
【问题描述】:
我不明白如何使用 sunspot 进行搜索以处理 has_many 关联。用户从 select_tag 字段中选择技能,结果返回与技能 ID 匹配的记录。
为了记录,当我按下搜索按钮时,我得到了这个:
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 中提取的技能 ID:
<%= 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。
【问题讨论】:
标签: ruby-on-rails sunspot