ActiveRecord:通过嵌套的记录属性过滤记录



在我的Rails应用程序中,我有两个模型:学生和课程。

学生有许多课程。

在rails控制台中运行student .first.courses命令将返回属于第一个学生的课程集合。

我想知道是否有可能写一个命令来检查是否有任何学生上了某门课。

例如,如果我想看看是否有学生把"英语"作为他们的课程之一,我该怎么写呢?

任何帮助将非常感激-谢谢!

对,这绝对是可能的:

Student.joins(:courses).where(courses: { name: 'English' })

根据Andrey的回答,您可以将其封装在Student模型中的作用域中,如下所示:

scope :taking, ->(subject_name) { joins(:courses).where(courses: {name: subject_name})}

,然后和:

一起使用
Student.taking("English")

最新更新