在Ruby中定义一个方法非常简单,我只能使用undef METHOD_NAME
.
一个班有类似的课程吗?我是MRI 1.9.2
岁.
我必须取消定义一个ActiveRecord模型,运行两行代码,然后将模型恢复到其原始形式.
问题是,我有一个模型Contact
,我正在使用一家公司的API,碰巧他们有一个名为Contact
的类,更改我的模型名称对我来说是一件非常艰巨的工作.
在这种情况下我能做什么?
在Ruby中定义一个方法非常简单,我只能使用undef METHOD_NAME
.
一个班有类似的课程吗?我是MRI 1.9.2
岁.
我必须取消定义一个ActiveRecord模型,运行两行代码,然后将模型恢复到其原始形式.
问题是,我有一个模型Contact
,我正在使用一家公司的API,碰巧他们有一个名为Contact
的类,更改我的模型名称对我来说是一件非常艰巨的工作.
在这种情况下我能做什么?
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
EDIT刚刚注意到你的编辑,删除常数可能不是实现你想要的最好方法.为什么不把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"
同样,这个问题是,你仍然有新的Contact
类,所以你必须再次删除它.我真的建议你改用名字间隔上课.这也将帮助您避免任何加载问题