Ruby on Rails - Association

时间:2015-02-04 08:54:50

标签: ruby-on-rails

我必须在学生,课程和招生之间建立关系。

一名学生只能参加一门课程。 许多学生都可以注册一门课程。

如何实现这一目标?

我能够像这样创建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>

1 个答案:

答案 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