使用accepts_nested_attributes_for时如何防止模型中的重复数据?

时间:2011-06-18 20:20:35

标签: ruby-on-rails ruby-on-rails-3 models nested-forms nested-attributes

class Student < ActiveRecord::Base
  has_many :enrollments
  has_many :courses, :through => :enrollments
  accepts_nested_attributes_for :courses
end

class Course < ActiveRecord::Base
  has_many :enrollments
  has_many :students, :through => :enrollments
end

class Enrollment < ActiveRecord::Base
  belongs_to :student
  belongs_to :course
end

我目前在我的模型中有这个关联,我使用的是accepts_nested_attributes_for,但特别是ryanB的嵌套形式https://github.com/ryanb/nested_form 现在我正在创建一个学生形式并添加课程,我创建学生A,名字:Ryan,然后创建课程:数学。现在我要创建学生B,名字:弗兰克和课程:数学。现在我的课程数据库正在创建两个数学行,但我希望它只有一个,这样我就可以参考数学课程中的所有学生。我该如何做到这一点?

课程db现在看起来像这样

id: 1, name: Math
id: 2, name: Math

这就是我的注册数据库的样子:

student_id: 1, course_id: 1
student_id: 2, course_id: 2

但我想

student_id: 1, course_id: 1
student_id: 2, course_id: 1

1 个答案:

答案 0 :(得分:1)

如果真的应该只有一个“数学”课程,我建议在课程模型上使用validates_uniqueness_of:name。当您创建新学生并希望将其附加到(仅)“数学”课程时,请执行Course.find_by_name(“Math”)。students.create(:name =&gt;“Frank”)。