gpt4 book ai didi

ruby-on-rails - 如何在 Ruby on Rails 中的模型之间创建一对多关系?

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:51 26 4
gpt4 key购买 nike

我的 ruby​​ 模型和 Controller 中有学生和类(class),所以我想将这两件事联系起来并向用户展示他注册的类(class),然后单击这些类(class)以查看该类(class)中的内容。我是 ruby​​ 的新手,所以我对 has_many 了解不多,我找不到可以做我想做的事情的东西

我使用脚手架来创建模型和 Controller ,用户只有名字,电子邮件和类(class)只有 course_name

学生:

 create_table :student do |t|
t.string :name
t.string :email

类(class):

create_table :course do |t|
t.string :name

t.timestamps

在学生索引中,我只列出了我拥有的所有学生。请减半

最佳答案

看起来您想在 studentscourses 之间使用多对多关联。有多种方法可以实现这一点。我会选择 has_many :though 选项描述 here ,您可以在其中添加一个名为 StudentCourse 的附加模型。

所以在你的场景中,你会:

  1. 使用 rails generate model StudentCourse student:references model:references

  2. 生成这个 StudenCourse 模型
  3. 将以下内容添加到您的Student 模型

    class Student
...
has_many :student_courses
has_many :courses, through: student_courses
...
end
  1. 将以下内容添加到您的类(class)模型
    class Course
...
has_many :student_courses
has_many :students, through: student_courses
...
end
  1. 使用 rake db:migrate 运行迁移
  2. 现在您可以开始向类(class)添加学生,反之亦然。例如:
    Student.last.courses << Course.last
Course.first.students << Student.first

并且在您的 Controller 中,您可以简单地调用 student.courses 来查看与给定学生关联的类(class),或调用 course.students 来查看参加特定类(class)的学生当然。

注意 CourseStudent 模型现在如何使用 has_many: ..., through: :student_courses 相互关联。

使用这种多对多关联的另一个好处是灵 active 。例如,您可能想要开始记录学生是否放弃了特定类(class)。您只需向这个新的 student_courses 表中添加一个 dropped_at 列即可。

编辑

添加一些更详细的示例来说明如何使用这个新关联:

如前所述,您可以通过 Rails 控制台将类(class)附加到学生,反之亦然。例如,id 为 1 的学生想注册 id 为 2 的类(class):

Student.find(1).courses << Course.find(2)

同样,您可以像这样将学生添加到类(class)中:

Course.find(2).students << Student.find(1)

在幕后,这两个关联都将创建我们添加的 StudentCourse 类的新实例。因此,创建此关联的第三种选择是:

StudentCourse.create(student: Student.find(1), course: Course.find(2))

关于ruby-on-rails - 如何在 Ruby on Rails 中的模型之间创建一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58245100/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com