Ruby on rails 如何检索rails中表的连接信息?

Ruby on rails 如何检索rails中表的连接信息?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我的rails应用程序现在正在使用ActiveRecord,我对RubyonRails感到非常惊讶。 My DB有三个表: 学生(Id、姓名、家长Id) 父母(身份证、姓名) 等级(Id、学生Id、值) 三个模型 我有三种观点,其中一种观点我必须列出学生,所以我做了一个学生。所有的观点都有效 但在其中一个视图中,我需要列出学生的家长姓名,在第三个视图中,我列出了学生的姓名和成绩 我现在完全迷路了:如果我的模型是我的表,我如何检索这些表的连接信息 谢谢 编辑: 我加了一行 Student.incl

我的rails应用程序现在正在使用ActiveRecord,我对RubyonRails感到非常惊讶。 My DB有三个表:

学生(Id、姓名、家长Id) 父母(身份证、姓名) 等级(Id、学生Id、值)

三个模型

我有三种观点,其中一种观点我必须列出学生,所以我做了一个学生。所有的观点都有效

但在其中一个视图中,我需要列出学生的家长姓名,在第三个视图中,我列出了学生的姓名和成绩

我现在完全迷路了:如果我的模型是我的表,我如何检索这些表的连接信息

谢谢

编辑: 我加了一行

Student.includes(:parent, :grades).all.each do |student|
并添加了以下关系:

class Student < ActiveRecord::Base
  belongs_to :parent
end

class Parent < ActiveRecord::Base
  has_many :student
end
class-Student
我在设置关系时遇到一些问题,但现在我的页面加载了。仍然无法使用Student.parent.name属性。 使用获取调试信息,但不获取有关父级的信息。(students.parent显示家长id)

你知道我错过了什么吗?
这是一个名称冲突:我的学生表有一个名为parent的列。更改为“家长id”解决了此问题。

如果您的关系设置正确,您可以执行以下操作:

Student.all.each do |student|
  puts student.name
  puts student.parent.name
  student.grades.each do |grade|
    puts grade.value
  end
end

在本例中,您可能还希望使用
includes
,以避免为您检索的每个成绩的学生触发查询。在本例中,您将替换:

Student.all.each do |student|

区别在于,在第一种情况下,Rails触发一个单独的查询来检索每个学生的成绩(以及一个查询来获取每个家长的姓名)。这通常被称为“N+1问题”,因为如果你有10个学生,要循环遍历每个学生并获取其家长的姓名需要11个查询(一个查询获取所有学生,一个查询获取10个学生中的每个学生的家长姓名)

使用
includes
时,Rails将在一个查询中加载所有关联的模型和属性。有关更多信息,请查看:


太棒了,我简直不敢相信这会奏效:)我今晚会在家里试用:)Rails太棒了:)我现在无法访问我的代码,我今晚会在家里试用,然后再联系你:)
Student.includes(:parent, :grades).all.each do |student|