在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相关问答推荐

Ruby - 使用索引值识别和更新数组中的重复项

当数据包含换行符时,Ruby PKCS7 无法验证

如何增加 ruby​​ 应用程序的堆栈大小.递归应用程序获取:堆栈级别太深(SystemStackError)

Ruby 对象打印为指针

如何将消息附加到 RSpec 判断?

try 学习/理解 Ruby 的 setter 和 getter 方法

无法正确自动生成 Ruby DevKit 配置文件

有没有办法在 RSpec 中取消存根?

从 Ruby 中的 DateTime 中减go n 小时

使用 for each 时识别最后一个循环

如何在 ruby​​ rake 中明确地失败任务?

在 Rails 中,如何向 String 类添加新方法?

如何在数组中找到出现次数最多的项目

跳过 Enumerable#collect 中的迭代

将两个数组组合成哈希

如何在 Ruby 的 IRB 中启用自动完成

从Ruby中的子类方法调用父类中的方法

使用 Liquid 标记在 Jekyll 中获取今天的日期

Ruby:使用 ENV 变量(如果存在)的最简洁方法,否则使用默认值

Rubocop 25 线块大小和 RSpec 测试