2012-12-20 59 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