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

Sbb*_*bbs 6 activerecord many-to-many ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

在我的Rails应用程序中,我有2个模型之间的多对多关系,TeacherCourse通过连接表.我想创建某种验证,其中如果没有与至少一位教师相关联就无法创建课程(假设我们在添加新课程时所有教师都在数据库中).如果这是一对多的关系,这很容易做到,但是由于多对多关系,我们需要course在关联之前保存它们teachers.

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

Arn*_*uin 7

您应该编写自定义验证,这很容易(请适应您的代码):

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
Run Code Online (Sandbox Code Playgroud)

这样,你只能创建与一位老师相关的课程,如下所示:

teacher = Teacher.create()
course = Course.new()
course.teachers << teacher
course.save!
Run Code Online (Sandbox Code Playgroud)