首页 > 解决方案 > rails form:如果已经有这个孩子,不要在表单中显示孩子

问题描述

人.rb:

class Person < ApplicationRecord
  has_many :skills
end

技能.rb:

   class Skill < ApplicationRecord
      belongs_to :person
      validates_uniqueness_of :name, :scope => :person_id
    end

我制作了嵌套在 Routes.rb 中的技能:

  resources :people do 
    resources :skills
    end
  end

现在,在为客户创建新技能时,clients/1/skills/new我不希望能够选择客户已有的技能。怎么做到呢?这是我当前的输入字段:

= f.select :skill_id, Skill.all.map{|c| [c.name, c.id]}, {include_blank: true}

标签: ruby-on-rails

解决方案


在人.rb

def available_skills 
   skills = self.skills.pluck(:name, :id)
   Skill.pluck(:name, :id).select{|s| !skills.include?(s)}
end 

在视图模板中:

<%= f.select :skill_id, @person.available_skills, {include_blank: true} %>

推荐阅读