我在一个Rails 4项目中有以下类:
app/components/x2xfoo/bar/klass.rb其中klass.rb为:
module X2XFoo
module Bar
class Klass
end
end
end问题是Rails的自动加载机制没有找到这个常量:
$ bundle exec rails c
2.4.2 :001 > X2XFoo::Bar::Klass
NameError: uninitialized constant X2XFoo
from (irb):1
...
from bin/rails:8:in `require'
from bin/rails:8:in `<main>'当然,如果我更改klass.rb文件的内容以定义模块X2xfoo而不是X2XFoo,那么加载X2xfoo::Bar::Klass就可以了,因为它遵循标准的Rails约定。
但是,有没有一种方法可以使用X2XFoo常量并进行自动加载?
发布于 2018-03-11 03:17:27
创建或调整config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'X2XFoo'
end发布于 2018-03-11 19:03:09
更新config/application.rb文件以将app/目录添加到自动加载路径:
config.autoload_paths += %W(#{config.root}/app)确保您不会在代码中的任何地方手动要求您的新类。让Rails重新启动&试一试,看看它的神奇之处。
就这样。您的新类现在应该会自动重新加载,类似于rails的默认控制器、模型、视图等。
https://stackoverflow.com/questions/49210912
复制相似问题