对于基本的基本问题,我很抱歉,但我在理解 RoR 文档时遇到了一些麻烦。
假设我有 3 个模型——学生、班级和 Enrolled_in。如果不清楚,学生将注册班级,因此 Enrolled_in 应该将学生和班级作为外键。我为每一个生成了模型,但我很困惑我应该将什么放入关联的迁移文件与每个表的关联模型文件。我是否在迁移文件中指定表的列,以及模型中的关键约束?
如果有人可以澄清这一点,或者告诉我他们将如何解决我发布的示例问题,那将非常有帮助。谢谢。
对于基本的基本问题,我很抱歉,但我在理解 RoR 文档时遇到了一些麻烦。
假设我有 3 个模型——学生、班级和 Enrolled_in。如果不清楚,学生将注册班级,因此 Enrolled_in 应该将学生和班级作为外键。我为每一个生成了模型,但我很困惑我应该将什么放入关联的迁移文件与每个表的关联模型文件。我是否在迁移文件中指定表的列,以及模型中的关键约束?
如果有人可以澄清这一点,或者告诉我他们将如何解决我发布的示例问题,那将非常有帮助。谢谢。
首先,为了遵循约定,模型名称应该是EnrolledIn
,而不是Enrolled_in
。更好的是,将其更改为Enrollment
或具有明确含义的名词。而且您在尝试使用Class
(已经是 ruby 对象)作为模型名称时也会遇到麻烦。也许将其更改为Course
或类似的东西。
除此之外,您应该定义迁移中的所有列。您可以enrolled_ins
像这样定义表:
add_table :enrolled_ins do |t|
t.references :student
t.references :course # I'm using course instead of class as noted above
end
该references
快捷方式将添加一个 :student_id 和 :course_id 作为整数字段。
在您的模型文件中,您将拥有:
# student.rb
class Student < ActiveRecord::Base
has_many :enrolled_ins
has_many :courses, :through => :enrolled_ins
end
# course.rb
class Course < ActiveRecord::Base
has_many :enrolled_ins
has_many :students, :through => :enrolled_ins
end
# enrolled_in.rb
class EnrolledIn < ActiveRecord::Base
belongs_to :student
belongs_to :course
end