2011-02-08 90 views
1

我有3個模型,但該關聯有點棘手。Rails模型關聯的問題

首先我得到了用戶,對於2種不同類型的用戶,我有2種不同的配置文件模型,即Pteacher和Pstudent。

事情也是每個Pteacher有1 Pstudent。

所以我做了這樣的模型;

class User < ActiveRecord::Base 
    validates_uniqueness_of :uname 
    has_many :pteachers 
    has_many :pstudents 
end 


class Pteacher < ActiveRecord::Base 
    has_one :pstudent 
    belongs_to :user 
end 

class Pstudent < ActiveRecord::Base 
    has_one :pteacher 
    belongs_to :user 
end 

現在,如果我的經歷,首先選擇用戶不是選擇Pteacher不是像User.pteacher.pstudent選擇Pstudent,它給了我無方法錯誤。

如果我選擇Pteacher直接,不是我可以Pteacher.pstudent選擇Pstudent。

的問題是我想通過User=>Pteacher=>Pstudent

有沒有辦法來實現這一目標?

順便說一下,我發現如果我從用戶創建它,我無法達到教師的任何方法。例如,如果我寫入Rails控制檯;

user = User.first #Which is a teacher 
user.pteachers #This line gives me all the info about that users pteacher 
#now funny part 
pt = user.pteacher #this works too as now i have pt as a Pteacher which have all the data i want 
pt.id #fails??? 
pt.name #fails??? 
pt.pstudent #fails??? 
pt #writes all info about pteacher which has id and name 
+1

has_many應該是複數這裏不應該嗎?如果你只是做User.pteacher會發生什麼? – re5et 2011-02-08 12:38:43

+0

它似乎工作。事情是一些用戶是老師,其中一些是學生。所以如果用戶是學生而不是User.pteacher返回一個空數組,但如果用戶是一名教師而不是User.pteacher返回其配置文件 – gkaykck 2011-02-08 13:01:13

回答

0

解決它! :D

問題是,當我問User.Pteachers.Pstudent,沒有1教練實際上它是一個Pteachers陣列。所以User.Pteacher.first.Pstudent解決了它。

Thanks guys guys

0

您希望將關係從has_one更改爲belongs_to,以便Pteacher。試試看看。

class Pstudent < ActiveRecord::Base 
    belongs_to :pteacher 
    belongs_to :user 
end 

並且也檢索pteacher像這樣:

user = User.first # Which is a teacher 
pt = user.pteachers.first # retrieving first teacher from list 
p pt # prints out attributes of pt