如何避免Rails中的模块冲突?

时间:2017-07-04 10:39:15

标签: ruby-on-rails ruby activerecord activemodel

我在rails应用程序中有一个名为Benchmark的模型,虽然ruby在启动过程时默认需要其Benchmark模块。

无论如何我可以卸载Benchmark模块以使用我的Benchmark模型吗?

2 个答案:

答案 0 :(得分:1)

通常可以使用以下逻辑从原始名称解除Ruby常量:

require "benchmark"

BM = Benchmark
Object.send(:remove_const, :Benchmark)

class Benchmark
  def initialize
    puts "Hey, I'm your custom Benchmark"
  end

  ...
end

但是,特别是对于原始的Benchmark实现,这不起作用,因为它内部充满了像这样的名称引用:

@list << res = Benchmark.measure(label, &blk)

最实用的解决方案是选择“免费”同义词来命名您的模型。

答案 1 :(得分:0)

您可以使用命名空间模型。

module Myapp
  class Benchmark < ActiveRecord::Base
  end
end

您可能需要指定表名。

如果我是你,我只会为该模型命名,例如:标尺或指示器或MyBenchmark。