使用ruby中的模块扩展对象时的奇怪行为

时间:2012-04-19 16:06:48

标签: ruby-on-rails ruby mongoid

如果我执行以下操作:

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 = User和profile.class = Profile。

2 个答案:

答案 0 :(得分: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

看看你得到了什么输出。

答案 1 :(得分:0)

这实际上最终成为Mongoid中的一个错误。这是描述的问题: https://github.com/mongoid/mongoid/issues/1933

现在已在最近的提交中修复。