我的应用程序lib目录中有以下类:
proxy.rb
class Proxy
end
ga_proxy.rb
class GaProxy < Proxy
include GaProxy::Metrics
end
metrics.rb
class GaProxy
module Metrics
end
end
加载顺序在这里显然很重要:
metrics.rb需要在ga_proxy.rb
之前加载需要在ga_proxy.rb
之前加载proxy.rb但是如果在ga_proxy之前加载metrics.rb,那么我得到'类GaProxy'的超类不匹配',因为已经定义了没有父类的GaProxy。
如何解决这个问题?
由于
答案 0 :(得分:1)
在application.rb
文件中,按顺序指定要加载的每个文件:
config.autoload_paths += %W( #{config.root}/lib/proxy.rb, #{config.root}/lib/metrics.rb, #{config.root}/lib/ga_proxy.rb )
答案 1 :(得分:0)
我从未遇到过这个问题,但为什么你不能在配置/初始化程序中执行以下操作
创建文件config / initializers / libs.rb
require 'proxy'
require 'ga_proxy'
require 'metrics'
答案 2 :(得分: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