如何在ruby中搜索逗号分隔的单词

时间:2018-06-18 09:20:17

标签: ruby-on-rails activerecord ruby-on-rails-5

我想列出那些拥有关键技能的候选人(例如:想要列出候选人,如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')

它会列出具有这些键盘技能的候选人的数量。 请帮我这样做。

1 个答案:

答案 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 })