3

アプリケーションのlibディレクトリに次のクラスがあります。

proxy.rb

class Proxy
end

ga_proxy.rb

class GaProxy < Proxy
  include GaProxy::Metrics
end

メトリックス.rb

class GaProxy
  module Metrics
  end
end

ここでは、ロードの順序が明らかに重要です。

ga_proxy.rbの前にmetrics.rbをロードする必要があります

proxy.rbはga_proxy.rbの前にロードする必要があります

しかし、metrics.rbがga_proxyの前にロードされると、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

この問題が発生したことはありませんが、config/initializersで次のことができないのはなぜですか

ファイルconfig/initializers/libs.rbを作成します

 require 'proxy'
 require 'ga_proxy'
 require 'metrics'
于 2013-03-23T19:44:25.740 に答える
0

一般的に、ルビーでは、ファイルに必要なものが必要です。

# 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 に答える