2016-11-28 56 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

相关问题