我想列出那些拥有关键技能的候选人(例如:想要列出候选人,如css或html或css5等)。 有一个候选表和一个KeySkill和CandidateKeySkills表。
添加的Keyskills存储在具有属性名称的keyskills表中。在candidate_key_skills表中,存储了candidate_id和keyskill_id。
候选人的模型关系
candidate
has_many :candidate_key_skills, dependent: :destroy
has_many :key_skills, through: :candidate_key_skills
end
class CandidateKeySkill < ActiveRecord::Base
belongs_to :candidate
belongs_to :key_skill
end
class KeySkill < ActiveRecord::Base
belongs_to :candidate
has_many :candidate_key_skills
has_many :candidates, through: :candidate_key_skills
end
我在这个视图页面中获取了候选人数。但是keykill名称搜索部分中的sql是错误的。
<% @candidates.each do |candidate| %>
<% @c_skill_name = candidate.key_skills.map{|key| key.name}.join(",") %>
<% @keyskills = Candidate.joins(:key_skills,:candidate_key_skills).includes({candidate: [:rate_card, :category, :company, :city, :key_skills]}).where('key_skills.name like ?',"#{@c_skill_name}") %>
<% count = @keyskills.count %><%end %>
终端中的sql
SELECT COUNT(*) FROM `candidates`
INNER JOIN `candidate_key_skills` ON `candidate_key_skills`.`candidate_id` = `candidates`.`id`
INNER JOIN `key_skills` ON `key_skills`.`id` = `candidate_key_skills`.`key_skill_id`
INNER JOIN `candidate_key_skills` `candidate_key_skills_candidates` ON `candidate_key_skills_candidates`.`candidate_id` = `candidates`.`id`
WHERE (key_skills.name like 'css,css5,html')
它会列出具有这些键盘技能的候选人的数量。 请帮我这样做。
答案 0 :(得分:1)
很奇怪,因为您似乎只能使用candidate
行的candidate.key_skills.map{|key| key.name}.join(",")
值。
但是如果您仍然需要实现此类查询,则需要使用IN
表达式:
Candidate.joins(:key_skills).where('key_skills.name IN (?)', @c_skill_name.split(','))
甚至更简单:
Candidate.joins(:key_skills).where(key_skills: { id: candidate.key_skills_ids })