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