Rails 5,如果关系记录已经存在,如何创建一个赢得错误的has_many关系记录?

时间:2017-08-06 17:03:00

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

我有以下Rails 5模型设置:

JobTitle
  has_many :job_title_skills
  has_many :skills, through: :job_title_skills

Skills
  has_many :job_title_skills
  has_many :job_titles, through: :job_title_skills

JobTitleSkills
  belongs_to :job_title
  belongs_to :skill
  validates :job_title_id, uniqueness: { scope: :skill_id }

我要做的是以下内容:

skill1 = Skill.find_or_create_by(title: 'YYY')

job_titles = JobTitle.all
job_titles.each_with_index do |job_title, index|
  case job_title.title
  when "XXXXX"
    job_title.skills << skill1
  end
end

以上工作正常我第一次运行它,但一旦记录已经在数据库中创建,上面的错误w:

ActiveRecord::RecordInvalid: Validation failed: Job title has already been taken

如何更新上述内容,以便&lt;&lt;如果记录不存在,则仅创建,而不是创建?

由于

1 个答案:

答案 0 :(得分:2)

job_title.job_title_skills.find_or_create_by(skill: skill)