2016-11-28 59 views
0

一直試圖找出這一點,我真的很難過。找到所有沒有參加班級的學生(導軌)

所以我有一個danceclass模型

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

我有一個學生模型:

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

我有我的加盟模式:

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

我用@danceclass.students獲取列表所有在danceclass註冊的學生。我如何得到相反的? IE瀏覽器。所有沒有報名參加danceclass的學生?

回答

3

從所有學生開始,然後應用負面where子句刪除不想要的。

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

joins需要,因爲where聲明試圖基於上橋表中的ID,以減少


這將返回在特定@danceclass沒有參加所有的學生如果是相關的到單一的舞蹈課。不適合你的問題,但留下任何人有這個問題

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

我的聯繫是否錯誤?因爲它試圖查看學生表:Mysql2 ::錯誤:'where子句'中的未知列'students.danceclass_id':SELECT'students'。* FROM'students' WHERE('students'.'danceclass_id'!= 1) – Blogger11

+0

哦,哎呀,我的將工作一個has_one的關係。我會通過關係更新has_many。 – Jared

+0

非常感謝!所以這會讓我的學生沒有參加當前課程,但是那些沒有參加任何課程的學生呢?我有一個新的學生還沒有參加任何課程,所以他在連接表上沒有記錄。我需要他能夠出現在這個可用的學生名單上,以報名參加一堂課。 – Blogger11

相關問題