Bhu*_*dha 53 ruby activerecord ruby-on-rails-3
在Ruby中取消定义方法非常简单,我可以使用undef METHOD_NAME
.
班级有类似的东西吗?我在MRI 1.9.2
.
我必须取消定义ActiveRecord模型,运行两行代码,然后将模型恢复为原始形式.
问题是,我有一个模型Contact
,我正在使用公司的API,并且碰巧他们有一些叫做的类Contact
,而改变我的模型名称对我来说将是很多工作.
在这种情况下我该怎么办?
Lee*_*vis 87
>> class Foo; end
=> nil
>> Object.constants.include?(:Foo)
=> true
>> Object.send(:remove_const, :Foo)
=> Foo
>> Object.constants.include?(:Foo)
=> false
>> Foo
NameError: uninitialized constant Foo
Run Code Online (Sandbox Code Playgroud)
编辑只是注意到你的编辑,删除常量可能不是实现你正在寻找的最好的方法.为什么不将其中一个Contact
类移动到单独的命名空间中.
EDIT2你也可以像这样暂时重命名你的班级:
class Foo
def bar
'here'
end
end
TemporaryFoo = Foo
Object.send(:remove_const, :Foo)
# do some stuff
Foo = TemporaryFoo
Foo.new.bar #=> "here"
Run Code Online (Sandbox Code Playgroud)
同样,问题在于你仍然会有更新的Contact
类,所以你必须再次删除它.我真的建议你的类名称间距.这也可以帮助您避免任何加载问题
归档时间: |
|
查看次数: |
17828 次 |
最近记录: |