2010-02-12 59 views
1

我有一個用戶模型,它屬於配置文件(belongs_to多態)。一個模型有兩個子類,但profile_type in 用戶始終對應於父模型。在rails中的繼承和多態關聯

User < ActiveRecord::Base 
    belongs_to :profile, :polymorphic => true 

SomeProf < ActiveRecord::Base 
    has_one :user, :as => :profile 

SomeDeepProf1 < SomeProf 

SomeDeepProf2 < SomeProf 

然後:

sdp1 = SomeDeepProf1.new 
user = sdp1.create_user 
user.profile_type 
> 'SomeProf' 

即使陳述在子類協會,profile_type仍然SomeProf

爲什麼會發生這種情況?有什麼辦法profile_type匹配的子類,而不是父類?

回答

3

發生這種情況是因爲_type列應該標識模型的表格,並且不應包含模型本身的數據 - 只是參考。

但是,如果您檢查user.profile.type,則應返回SomeDeepProf1

+0

是的馬塞爾,我注意到了。我的代碼使用profile_type來決定用戶的類型,並避免額外訪問數據庫。感謝您的解釋! – nanda 2010-02-12 15:42:36