在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类,所以你必须再次删除它.我真的建议你改用名字间隔上课.这也将帮助您避免任何加载问题

Ruby相关问答推荐

Gemfile.lock 是否应该包含在 .gitignore 中?

在 Ruby 中查找字符串中出现的 # 个字符

YAML 每个缩进多少个空格?

Ruby数组中的`return`#map

Jekyll 默认安装没有 _layouts 目录

安装 Ruby 后 MAC OS X 上的活动开发者路径无效

无法在 OS X“El Capitan”上安装 gem

创建一个哈希值作为数组和默认值作为空数组

OpenSSL vs GPG 用于加密异地备份?

当我将参数传递给脚本时,使用 gets() 会出现“没有这样的文件或目录”错误

删除 Ruby 数组中的 nil 和空白字符串

数组.include?多个值

安装 RVM:“需求安装失败,状态为:1”

rbenv、rvm 和 chruby 有什么区别?

在Ruby中将关键字与常规参数混合?

在 Ruby 中使用 << 将键/值对附加到散列

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime

如何从 Ruby 中的字符串中删除特定字符?

JavaScript中Ruby的||=(或等于)?

如何查找 gem 文件的安装位置