2016-10-03 69 views
0

在我的Rails应用程序中,我有2个模型:学生和课程。ActiveRecord:通过嵌套记录属性筛选记录

学生有很多课程。

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

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

例如,如果我想看看是否有任何“英语”的学生作为他们的课程之一,我会如何写这个?

任何帮助将不胜感激 - 谢谢!

+1

当然属于学生?通过这种方式,您将拥有许多相同课程的实例(每个学生需要一次),您可能需要重新访问您的设计并拥有它,Student _ has和many_(或_has many through_,阅读两者的文档),这样你就可以在学生中共享一个“英语”实例。 – Leito

回答

4

是的,这是绝对可能的:

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

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

+0

这正是我所期待的。谢谢,我会检查你链接的文档,并在计时器到期后接受你的回答。 – ConorB

1

从安德烈的回答之后,你可以换,最多在一个范围内的学生模型中,像这样:

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

,然后用使用它:

Student.taking("English")