假设我有两个数据库:一个用于学生,另一个用于班级。我希望能够‘添加’课程到特定的学生,也能够将学生添加到特定的班级。我假设我需要在这里使用一个连接表,但是我对如何使用它们有点迷惑。我最终希望能够做到以下几点:
@class.students.find(@student_id)
这会告诉我这个学生是否在班上。我知道班级和学生之间的关系是“has_many”,反之亦然。在迁移文件中执行't.references :students‘可以做到这一点吗?我尝试将该行添加到我的迁移文件中,然后尝试使用上面的语句查找某些内容,但它给出了一个错误。我是RoR的新手,所以我甚至不确定实现这一目标的最佳方式是什么。如有任何帮助,我们不胜感激!
发布于 2011-09-30 13:12:03
是的,这是一个多对多的关系(班级有很多学生,学生有很多班级)。为此,您将使用has_many :through
关系。看看ActiveRecord::Associations
的文档(Ctrl-F表示“关联连接模型”)。
在迁移中,t.references :students
是您指定belongs_to
关系的方式,因为它只添加了一个student_id
列(该列只能容纳一个id,即一个学生)。但是,连接模型将有两列:student_id
和class_id
。(顺便说一下,在Ruby中调用一个模型'Class‘是自找麻烦的。我可以推荐“课程”吗?)
发布于 2015-07-15 01:09:02
这是一个老问题,但以防有人像我一样偶然发现这一点,你现在可以使用relationships has_and_belongs_to_many
。所以,是的,您将创建一个连接表:
create_join_table :students, :courses do |t|
t.integer :student_id
t.integer :course_id
end
然后在模型中,你会说一个学生has_and_belongs_to_many :courses
和一个课程has_and_belongs_to_many :students
。不需要创建名为CourseStudent的第三个类。此link包含所有这些信息
https://stackoverflow.com/questions/7606124
复制相似问题