代码之家  ›  专栏  ›  技术社区  ›  SkRoR

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

  •  0
  • SkRoR  · 技术社区  · 7 年前

    我想列出候选项,计算那些拥有键杀的人(例如:想列出具有键杀的候选项,如css、html或css5)。 有一个候选表和一个keyskill和candidatekeyskills表。

    添加的keyskills存储在具有属性名的keyskills表中。在候选项_key_skills表中,存储候选项_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
    

    我在视图页面中得到了这样的候选人数量。但是在keyskill名称搜索部分,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 回复  |  直到 7 年前
        1
  •  1
  •   taras    7 年前

    奇怪,因为你似乎可以使用 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 })