将app / * / * / some_module.rb中的模块直接加载到全局命名空间

时间:2017-01-05 21:31:15

标签: ruby-on-rails ruby ruby-on-rails-4

Rails将文件从app/models/concernsapp/controllers/concerns直接加载到全局命名空间而不是Concerns命名空间。

因此,如果您在SomeConcern而不是app/models/concerns/some_concern.rb定义模块Concerns::SomeConcern,那么您只有SomeConcern可用。

我想在concerns的另一个子目录中添加app文件夹,其行为方式相同。更具体地说:我想在SomeSerializerConcern定义app/serializers/concerns/some_serializer_concern.rb,但目前仅在我将模块定义为Concerns::SomeSerializerConcern时才有效。

我在config / application.rb中有这一行:

config.paths.add "app/serializers/concerns", eager_load: true

在autoload和eager_load上的

This excellent post让我相信这就是Rails本身如何完成我想要做的事情,但它似乎在这种情况下无效。我正在使用Rails 4.2.6。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

原来这个gist提供了答案。

我需要做的就是直接将路径添加到config/application.rb中的eager_load_paths:

config.eager_load_paths += [Rails.root.join('lib'),
                            Rails.root.join('app', 'serializers', 'concerns')]