如何使用ActiveRecord中的另一个表的列检索一个表的所有表和另一个表中的所有联接的记录

时间:2019-02-27 02:53:39

标签: ruby-on-rails ruby-on-rails-5

我想检索一个表中的所有表,并检索另一表中的所有联接记录。

我想同时拥有两个表中的所有列

这在SQL中非常简单

例如

SELECT * 
FROM students
JOIN teachers
ON students.id = teachers.student_id

如何在Rails中执行相同操作?

我尝试过

Student.includes(:teacher)

Student.joins(:teacher).includes(:teacher)

联接正在工作,但是我无法访问“教师”表中的列

请注意,最终目标只是能够在控制器中创建实例变量,以便我可以在视图中访问两者学生和教师数据

1 个答案:

答案 0 :(得分:0)

Student.includes(:teacher)将返回ActiveRecord::CollectionProxy,这意味着如果采用此集合中的特定对象,它将是Student类对象。

与sql查询被触发并从2个表返回数据不同,它在rails中无法正常工作,您只能从students列中获取数据,该列将与teachers表中的关联记录相关,因为它表示{{ 1}}模型。

您可以访问更多Student数据,例如

teachers

在上面,当您在对象上调用 students = Student.includes(:teacher) students.last.teacher.name 关联时,不会在数据库中触发新查询