ActiveRecord:按嵌套记录属性过滤记录

时间:2016-10-03 15:21:37

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

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

学生有很多课程。

将命令Student.first.courses运行到rails控制台将导致属于第一个学生的课程集合被返回。

我想知道的是,是否可以编写一个命令来检查是否有任何学生参加过特定课程。

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

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

2 个答案:

答案 0 :(得分:4)

是的,这绝对可能:

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

有关该主题的更多信息,请参阅the docs

答案 1 :(得分:1)

继安德烈的回答之后,您可以将其包含在学生模型的范围内,如下所示:

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

然后将其用于:

Student.taking("English")