Ruby on rails Rails 3自动加载

Ruby on rails Rails 3自动加载,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我有一个类数据: class ConstData US_CITIES = ['miami', 'new york'] EUROPERN_CITIES = ['madrid', 'london'] end 它存储在/lib/const_data.rb下 其思想是,在模型、控制器或视图中,我可以执行以下操作: ConstData::美国城市获取美国城市等 Rails应该自动加载该类,我从以下方面获得: 然而,这不起作用。有人能告诉我如何做到这一点吗?丹尼尔的帖子是从2008年开始的

我有一个类数据:

class ConstData

  US_CITIES = ['miami', 'new york']

  EUROPERN_CITIES = ['madrid', 'london']

end
它存储在/lib/const_data.rb下

其思想是,在模型、控制器或视图中,我可以执行以下操作:

ConstData::美国城市
获取美国城市等

Rails应该自动加载该类,我从以下方面获得:


然而,这不起作用。有人能告诉我如何做到这一点吗?

丹尼尔的帖子是从2008年开始的。Rails从此发生了变化。
事实上,就在最近。Rails3不会自动加载lib/目录

不过,您可以很容易地重新激活它。打开
config/application.rb
并在config(在
应用程序
类中)中添加以下内容:

config.autoload_paths += %W(#{config.root}/lib)

然后您的lib/dir将自动加载。

配置。自动加载路径对我不起作用。我通过在
ApplicationController
中添加以下内容来解决此问题:

Dir["lib/**/*.rb"].each do |path|
  require_dependency path
end

自动加载路径不适用于您,您被迫执行以下操作的原因:

Dir["lib/**/*.rb"].each do |path|
  require_dependency path
end
是因为您忘了给类命名名称空间

lib/awesome/stuffs.rb应该包含如下类/模块:

class/module Awesome::Stuffs
....
但你有:

class/module Stuffs
....
Rails只能自动加载名称与其文件路径和文件名匹配的类和模块。


:)

按照要自动加载的lib dir的解决方案进行操作:

删除
config.threadsafe来自development.rb和production.rb

外接程序
config/application.rb

config.autoload_paths += %W(#{config.root}/lib)
config.threadsafe!
config.dependency_loading = true

谢谢,先生,我会在6分钟内接受。不管怎样,你能告诉我如何检查你的自动加载路径吗?::Application.config.autoload_pathswing!您在/lib中可能拥有的许多类型的模块都在初始化器中设置了配置信息,当模块重新加载时,这些配置信息将被删除,从而在开发在测试和生产中运行良好的产品时导致无法解释的失败。解决方案是将/lib路径添加到config.autoload_once_路径,而不是config.autoload_路径。另外值得注意的是,文件名很重要。它不适用于这个确切的例子,但它是相关的,我花了很长时间才意识到我的错误。看:很好。这之前没有提到,给我带来了很多问题。要使加载路径匹配,如果我有一个复合名词作为模块名,我应该怎么做?(即lib/monkey\u man/engine.rb-->模块MonkeyMan::engine?)它是否会自动caml case it?谢谢。我添加了
confing.threadsafe
在一系列的更改中尝试让wicked_pdf工作,这就是我的自动加载停止工作的原因。