验证多对多关系中关联的存在

时间:2014-06-29 19:27:51

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-4 many-to-many

在我的Rails应用中,我通过连接表在两个模型TeacherCourse之间建立了多对多的关系。我想创建某种验证,其中无法与至少一位教师相关联创建课程(假设我们在添加新课程时所有教师都在数据库中)。如果这是一对多关系,这很容易做到,但是由于多对多关系,我们需要保存course才能将其与teachers关联起来。< / p>

我的初步计划是覆盖create模型中的Rails Course方法以允许传递teacher_ids并在保存{{1}之前验证至少一个teacher_id的存在但是,我不确定这是一个不错的方法。

1 个答案:

答案 0 :(得分:7)

你应该写custom validation,这很容易(请适应你的代码):

class Course < ActiveRecord::Base

  has_and_belongs_to_many :teachers

  validate :has_one_teacher_at_least

  def has_one_teacher_at_least
    if teachers.empty?
      errors.add(:teachers, "need one teacher at least")
    end
  end
end

这样,如果与一位老师相关联,你就只能创建课程:

teacher = Teacher.create()
course = Course.new()
course.teachers << teacher
course.save!
相关问题