2016-10-03 8 views
0

私のRailsアプリケーションでは、学生とコースの2つのモデルがあります。ActiveRecord:ネストされたレコード属性によるレコードのフィルタ

多くのコースがあります。

コマンド「Student.first.courses」をレールコンソールに実行すると、返される最初の生徒に属するコースのコレクションが作成されます。

私は、特定のコースの生徒がいるかどうかを確認するコマンドを書くことができるかどうか疑問に思っています。

たとえば、コースの1つに「英語」を含む生徒がいるかどうかを確認するにはどうすればよいですか?

ご協力いただければ幸いです。ありがとうございます!

+1

やコースの学生に属し?この方法で、あなたは同じコースの多くのインスタンスを持っています(すべての学生に一度)、あなたはあなたのデザインを再訪したいと思うかもしれませんが、Student _hasとmany_に属しています(または_生徒の間で共有される「英語」の1つのインスタンスを持つようにします。 – 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") 
関連する問題