Rails将文件从app/models/concerns
和app/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
This excellent post让我相信这就是Rails本身如何完成我想要做的事情,但它似乎在这种情况下无效。我正在使用Rails 4.2.6。有任何想法吗?
答案 0 :(得分:1)
原来这个gist提供了答案。
我需要做的就是直接将路径添加到config/application.rb
中的eager_load_paths:
config.eager_load_paths += [Rails.root.join('lib'),
Rails.root.join('app', 'serializers', 'concerns')]