Tag: autoload

使用Rails自动加载时,名称与顶级常量冲突

我在app/models/dog.rb有一个类Dog ,在app/services/my/deeply/nested/dog.rb另一个类Services::My::Deeply::Nested::Dog 。 现在在Services :: My(app / services / my.rb)中,我引用了以下内容之一(无需区分,因为在所有情况下行为都是相同的): Deeply::Nested::Dog Services::My::Deeply::Nested::Dog ::Services::My::Deeply::Nested::Dog 无论我选择哪一个,我总是收到以下错误消息: services / my.rb:warning:toplevel constant由Services::My::Deeply::Nested::Dog引用的Services::My::Deeply::Nested::Dog 此外,我深深嵌套的狗甚至从未被解释者看到(我通过使用put和语法错误发现,没有任何反应)。 可能的解决方法(我都不喜欢)是: 重命名其中一个Dog类 使用RAILS_ENV = production运行以禁用自动加载并使用预先加载 require_dependency指向深层嵌套的狗 作为一名计算机科学家,我发现上述解决方法都不令人满意。 我想了解为什么没有解决方法就找不到我深深嵌套的Dog,并找出最先进的Ruby / Rails解决方案对于这个问题。 非常感谢提前。

如何在Rails 3中列出所有自动加载路径

如何列出Rails 3中的所有自动加载路径? 在Rails控制台中,当我这样做时,它只列出添加到配置的自定义路径: $ rails c Loading development environment (Rails 3.2.9) 1.9.3p194 :001 > MyRailsApp::Application.config.autoload_paths => []

在开发模式下,Rails3不会在lib中重新加载代码

情况: 我在lib/foo/bar.rb有一个代码,其定义如下: module Foo class Bar def test “FooBar” end end end 在我的助手FooBarHelper ,我有: require `lib/foo/bar` module FooBarHelper def test_foo_bar fb = Foo::Bar.new fb.test end end 在我看来,我这样调用这个辅助方法: 在我的config/environments/development.rb ,我将目录添加到了config.autoload_paths : config.autoload_paths += [“#{config.root}/lib/foo”] 问题: 当我将Foo::Bar.test的返回值更改为例如”MODIFIED FOOBAR” ,原始返回值”FooBar”仍然显示在视图上而不是新值。 由于我处于开发模式,代码不应该在每个请求上重新加载代码吗? 有人能告诉我我错过了什么吗? 谢谢!