2016-11-28 5 views
0

これをしばらく把握しようとしていて、本当に困っています。クラスに登録していない生徒をすべて見つけてください(レール)

だから私は、私が学生のモデル持って

class Danceclass < ActiveRecord::Base 
has_many :danceclass_students 
has_many :students, through: :danceclass_students 

danceclassモデルを持っている:

class DanceclassStudent < ActiveRecord::Base 
belongs_to :student 
belongs_to :danceclass 

私はリストを取得するために@danceclass.studentsを使用します。私は私のモデルに参加している

class Student < ActiveRecord::Base 
has_many :danceclass_students 
has_many :danceclasses, through: :danceclass_students 

danceclassに登録されているすべての生徒のどのように私はそれの反対を得るのですか? IE。すべての学生はこのdanceclassに登録されていませんか?

答えて

3

すべての生徒で始め、負のwhere句を適用して、不要なものを削除します。 joins

Student.joins(:danceclass_students).where.not(danceclass_students: {danceclass_id: @danceclass.id }) 

where文がブリッジテーブル上のIDに基づいて削減しようとしているので、必要とされている


それが関連している場合、これは、特定の@danceclassに在籍していないすべての生徒を返します。 1つのダンスクラスに。あなたの質問ではありませんが、他の誰かを残してこの問題があります

Student.where.not(danceclass: @danceclass) 
+0

私の関係は間違っていますか? Mysql2 :: Error:未知の列 'students.danceclass_id' in where句:SELECT 'students'。* FROM' students' WHERE( 'students'.danceclass_id'!= 1) – Blogger11

+0

Oh whoops、私はhas_one関係のために働くでしょう。私はhas_many関係を使って更新します。 – Jared

+0

ありがとうございました!そうすれば、私は現在の授業に登録されていない学生になりますが、どの授業にも入学していない学生はどうなりますか?私はクラスにまだ登録していない新しい学生がいるので、彼は参加テーブルにレコードを持っていません。私は彼がクラスに登録する利用可能な学生のこのリストに表示できるようにする必要があります。 – Blogger11

関連する問題