2016-10-03 108 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")