【发布时间】:2012-12-04 21:58:35
【问题描述】:
我有一个名为 Client 的模型,我想在某些情况下克隆它,其中客户端(现实世界的那种)进行了需要更改类级别的修改。
例如,如果我有:
class Client
set_table_name :clients
def some_method
puts "Hello"
end
end
如果我有以下情况:
module ClientA
def some_method
puts "World"
end
end
我希望我可以克隆(或复制)该类,然后包含模块以覆盖方法 some_method。
但这是在我的生产控制台中发生的事情:
> CA = Client.dup
> CA.singleton_class.send(:include, ClientA) # Or just CA.send(:include, ClientA)
> client = CA.new
> client.some_method
=> "Hello" # Expected "World"
这有什么诀窍吗?
【问题讨论】:
-
不是一个真正的答案,但是“我的客户需要特定类别的更改”是什么意思?我知道 ruby 很好而且很灵活,但是如果你每次你的客户改变他的心情并要求你“改变软件的行为,但只针对客户端 X”时动态地创建一个新类,你或多或少地要求麻烦...最终会得到一堆无法调试的垃圾软件。
-
是的,我知道。我不是这个请求的粉丝,但我试图找到一些优雅的方式来做到这一点。到目前为止还没有真正发现任何东西(不确定我会不会)。