2012-04-19 91 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