怎么在rails上使用ruby连接表?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

假设我有两个数据库:一个给学生,另一个给班级使用。我希望能够为特定的学生“添加”课程,并且能够将学生添加到特定的课程中。我假设我需要在这里使用连接表,但是我对如何使用它们有点遗憾。我最终希望能够做到这样:

  @class.students.find(@student_id)

提问于
用户回答回答于

是的,这是一个多对多的关系(班级有很多学生,学生有很多班级)。为此,你将使用has_many :through关系。看一下文档ActiveRecord::Associations(Ctrl-F代表“Association Join Models”)。

在迁移中,t.references :students你是如何指定belongs_to关系的,因为它只是添加一student_id列(它只能容纳一个id,即一个学生)。然而,一个连接模型将有两列:student_idclass_id。(顺便说一句,在Ruby中调用一个'Class'类是在寻求麻烦,我可以建议'Course'?)

用户回答回答于

创建迁移rails g model CourseStudent为n:m关系创建联接模型,并迁移到相应的表。

编辑迁移文件CreateCourseStudent,使其包含以下内容: class CreateCourseStudent < ActiveRecord::Migration def change create_table :course_students do |t| # Your code comes here t.integer :student_id t.integer :course_id # Here comes the generated code t.timestamps end end end

运行迁移:rake db:migrate。因此,连接表现在应该存在于数据库中。

将以下代码添加到模型中 class Course < ActiveRecord::Base has_many :course_students has_many :students, :through => :course_students end class Student < ActiveRecord::Base has_many :course_students has_many :courses, :through => :course_students end class CourseStudent < ActiveRecord::Base belongs_to :student belongs_to :course end

扫码关注云+社区