2012-12-20 48 views

回答

4

这应该有你想要的东西:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

我想你想的class_name选项:

class Lesson < ActiveRecord::Base 
    belongs_to :teacher, class_name: "User" 
    has_many :students, class_name: "User" 
end 
+0

没有想过这种可能性,建议很好! – SaschaM78

+0

我可以用同样的方法使用has_many吗? – gosukiwi

+1

哦,哎呀,我写了'belongs_to'而不是'has_many'。是的,它具有相同的'class_name'选项,所以它的工作方式相同。 –

0

在你当前的代码,所有用户都可以成为“业主”(老师)的一个教训,而应该有两个额外的班级“学生”和“老师”,这两个班级与“用户”班级的关系为1:1。

这将更好地适应:

class Teacher < ActiveRecord::Base 
    has_one :user 
end 

class Student < ActiveRecord::Base 
    has_one :user 
end 

class Lesson < ActiveRecord::Base 
    belongs_to :teacher 
    has_many :students 
end 
+0

但是,学生可以成为教师,反之,所有用户都可以创建课程并吸取其他用户的教训。 – gosukiwi

+0

在这种情况下,学生会将其班级更改为“老师”,反之亦然,用户实例会持续存在,该关联会发生变化。如果你不需要预过滤,我会坚持Jeremy Ruten的解决方案。 – SaschaM78