3

我的应用程序 lib 目录中有以下类:

代理.rb

class Proxy
end

ga_proxy.rb

class GaProxy < Proxy
  include GaProxy::Metrics
end

指标.rb

class GaProxy
  module Metrics
  end
end

加载顺序在这里很重要:

metrics.rb 需要在 ga_proxy.rb 之前加载

proxy.rb 需要在 ga_proxy.rb 之前加载

但是,如果在 ga_proxy 之前加载了 metrics.rb,那么我会得到“GaProxy 类的超类不匹配”,因为已经在没有父类的情况下定义了 GaProxy。

我该如何解决这个问题?

谢谢

4

3 回答 3

1

在您的application.rb文件中,按顺序指定要加载的每个文件:

config.autoload_paths += %W( #{config.root}/lib/proxy.rb, #{config.root}/lib/metrics.rb, #{config.root}/lib/ga_proxy.rb )
于 2013-03-23T19:46:53.867 回答
0

通常,在 ruby​​ 中,您需要文件中的内容:

# ga_proxy.rb
require './proxy'
require './metrics'

class GaProxy < Proxy
  include GaProxy::Metrics
end

这是假设文件位于同一目录中。当然,Rails 为您做了一些自动加载魔法,但您仍然可以明确说明您的需求。

编辑

您必须在以下位置指定超类metrics.rb

# metrics.rb
class GaProxy < Proxy
  module Metrics
  end
end
于 2013-03-23T19:47:09.053 回答
0

我从来没有遇到过这个问题,但为什么你不能在 config/initializers 中执行以下操作

创建一个文件 config/initializers/libs.rb

 require 'proxy'
 require 'ga_proxy'
 require 'metrics'
于 2013-03-23T19:44:25.740 回答