2012-04-19 46 views
0

與模塊擴展對象時,如果我做到以下幾點:古怪的行爲在紅寶石

user = User.new 
user.extend Customer 
user.is_a? Customer == true 

它工作正常。

但是,如果我做了以下(其中profile是mongoid模型和用戶嵌入):

profile = Profile.all.first 
profile.user.extend Customer 
profile.user.is_a? Customer == false 

用戶不再是一個客戶。必須有一個簡單的理由,但我看不到它。

編輯:用戶和配置文件是mongoid模型,即。 profile.user.class =用戶和profile.class =個人資料。

+0

剛更新的問題。 – stantona 2012-04-19 16:15:23

+0

什麼是'user.class'和什麼是'user.class.ancestors'?您仍然沒有提供完整的,可重複的測試用例。 – Phrogz 2012-04-19 16:15:29

回答

0

我的猜測:每次你打電話給profile.user你都會得到一個新的對象。試試:

2.times{ p profiler.user.object_id } 

看看會發生什麼。然後嘗試:

u = profile.user 
u.extend Customer 
p u.is_a? Customer 
p profile.user.is_a? Customer 

並查看您得到的輸出。

+0

是的,我也這麼認爲,但它實際上給出了相同的對象ID。 – stantona 2012-04-19 16:19:56

+0

所以,如果你做'u = profile.user; u.extend客戶; p [u.class,u.class.ancestors]'你看到了什麼? – Phrogz 2012-04-19 16:21:43

+0

爲u.class我得到用戶 爲u.class.ancestors我得到一堆Mongoid相關的類和模塊,以及模塊:0x007fb1fb2cc3d8。 – stantona 2012-04-19 16:25:17