在rails

时间:2016-04-02 05:36:26

标签: ruby-on-rails ruby

我在模块中定义了probems自动加载类。有人可以指出我做错了吗?

application.rb中

config.autoload_paths += Dir["#{Rails.root}/lib/**/"]

LIB / metrics_module.rb

module MetricsModule
  class Metrics
  end

  class BaseMetrics
  end
end

LIB /度量/ server_metrics.rb

module MetricsModule
  class ServerMetrics < BaseMetrics
  end
end

我试图在我的代码中使用它

  def new_s_to_s_metrics(platform_type)
    return ServerMetrics.new(self, platform_type)
  end

但是我出现了这个错误 - :

  

更新Mongo预计算数据时出错。错误是无法自动加载常量ServerMetrics,预期/webapps/tensile/lib/metrics/server_metrics.rb来定义它

更新

将文件移动到新文件夹metrics_module后,发生了什么:我按照你说的做了,这就是我最终的地方

Error updating Mongo Precomputation Data. Error is Unable to autoload constant AfMetrics, expected     
/webapps/adwyzeupstream/lib/metrics_module/af_metrics.rb to define it
/webapps/adwyzeupstream/lib/tasks/helper.rake:30:in `rescue in timed_task'
/webapps/adwyzeupstream/lib/tasks/helper.rake:37:in `timed_task'
/webapps/adwyzeupstream/lib/tasks/precomputation.rake:5:in `block (2 levels) in <top (required)>'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `eval'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/bin/ruby_executable_hooks:15:in `<main>'
LoadError: Unable to autoload constant AfMetrics, expected /webapps/adwyzeupstream/lib/metrics_module/af_metrics.rb to define it
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:495:in `load_missing_constant'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:184:in `const_missing'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:526:in `load_missing_constant'
/Users/pratikbothra/.rvm/gems/ruby-2.2.2/gems/activesupport-4.2.3/lib/active_support/dependencies.rb:184:in `const_missing'

代码就像

LIB / metrics_module / af_metrics.rb

module MetricsModule
  class AfMetrics < BaseMetrics
  end
end

1 个答案:

答案 0 :(得分:1)

要成功自动加载,该类将按照Rails约定位于具有名称的文件中。

<强> TL; DR

mkdir lib/metrics_module
mv lib/metrics/server_metrics.rb lib/metrics_module/server_metrics.rb

名称约定是:嵌套类'文件名将构造为top_module/nested_module/class_name.rb,其中top_modulenested_moduleclass_name是各个模块的蛇形名称/类。

在您的情况下,Rails会尝试从class Metrics::ServerMetrics自动加载metrics/server_metrics.rb并在[不存在] class MetricsModule::ServerMetrics中查找metrics_module/server_metrics.rb,因此会失败。

相关问题