2016-10-03 2 views
0

В моем приложении Rails у меня есть 2 модели: студенты и курсы.ActiveRecord: запись фильтра по атрибуту вложенной записи

У студентов много курсов.

Выполнение команды Student.first.courses в консоли rails приведет к сбору курсов, относящихся к первому учащемуся, который возвращается.

Что мне интересно, если можно написать команду, которая проверила бы, есть ли какие-либо ученики с определенным курсом.

Например, если бы я хотел посмотреть, были ли какие-либо ученики с «английским» в качестве одного из своих курсов, как бы я это написал?

Любая помощь будет очень признательна - спасибо!

+1

И курс принадлежит Студенту ? Таким образом, у вас будет много экземпляров одного и того же курса (один раз для каждого ученика), вы можете захотеть пересмотреть свой дизайн и сделать это так, Student _has и принадлежит многим (или _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") 
Смежные вопросы