ruby-on-rails - 验证多对多关系中关联的存在

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

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

我最初的计划是覆盖 Rails create Course 中的方法允许通过的模型 teacher_ids并验证至少一个 teacher_id 的存在在保存 course 之前,但我不确定这是一个很好的方法。

最佳答案

你应该写 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

这样,您将只能在与一位教师相关联的情况下创建类(class),如下所示:
teacher = Teacher.create()
course = Course.new()
course.teachers << teacher
course.save!

关于ruby-on-rails - 验证多对多关系中关联的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24479474/

相关文章:

ruby-on-rails - heroku 上的 Rails : after push, 得到 "PG::UniqueViolation: ERROR: duplicate key value violates unique constraint"

ruby-on-rails - 如何在 Rails 中为对象的多个子对象编写表单

ruby-on-rails - 为什么在 Rails 中将非操作 Controller 方法保持私有(private)很重要?

jquery - .js.erb 文件中转义 html 的问题

ruby-on-rails - Rails ActiveRecord update_all id 数组

ruby-on-rails - Rails 3 急切加载深层嵌套关联

javascript - 在运行单元测试时如何将 React 添加为全局变量?

ruby-on-rails - 如何使用 Sunspot Solr 搜索多个表(模型)?

ruby-on-rails - Rails 3 数组 :Class 的未定义方法 `model_name'

ruby-on-rails - NoMethodError:未定义的方法和 #ActiveRecord::Relation []