我必须在学生,课程和招生之间建立关系。
一名学生只能参加一门课程。 许多学生都可以注册一门课程。
如何实现这一目标?
我能够像这样创建has_many_through关系
class
Student < User
has_many :enrollments
has_many :course , through: :enrollments
end
class Course < ActiveRecord::Base
has_many :enrollments
has_many :students, through: :enrollments, class_name: "User"
end
class Enrollment < ActiveRecord::Base
belongs_to :student, class_name: "User"
belongs_to :course
end
但这只适用于学生和课程两方面的has_many。 但是我只想要一个学生参加这样的课程
class Student < User
has_one :enrollment
has_one :course , through: :enrollment
end
但这不起作用。当我这样做时
Student.first.enrollment.create(course: Course.last)
我收到这样的错误
NoMethodError: undefined method `enrollment' for #<Student:0x007f7ff8baf4a8>
答案 0 :(得分:0)
感谢Marek Lipka建议这个解决方案。
在注册
中添加验证class Enrollment < ActiveRecord::Base
belongs_to :student, class_name: "User"
belongs_to :course
validates :student , uniqueness: true
end
并使用has_many注册
class Student < User
has_many :enrollments
has_many :course , through: :enrollments
end