Как предотвратить дублирование данных в модели при использовании accepts_nested_attributes_for? - PullRequest
2 голосов
/ 19 июня 2011
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 Сейчас я создаю студента в своей форме и добавляю курсы, я создаю Студента А,имя: Райан, а затем создать курс: математика.Теперь я хочу создать студента 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 Ответ

1 голос
/ 20 июня 2011

Если в действительности должен быть только один курс "Математика", я бы предложил validate_uniqueness_of: name в модели курса. Когда вы создаете нового ученика и хотите, чтобы он был присоединен к (только) курсу "Math", выполните Course.find_by_name ("Math"). Students.create (: name => "Frank").

...