Rails 6 切换到 Zeitwerk 作为默认的自动加载器。Zeitwerk 将加载 /app 文件夹中的所有文件,无需命名空间。这意味着,现在可以直接调用 app/services/demo/test_service.rb 中的 TestService 服务对象,例如TestService.new().call
。
然而,命名空间有助于在更复杂的 Rails 应用程序中组织对象,例如API::UsersController,或者对于我们使用 Registration::CreateAccount、Registration::AddDemoData 等的服务。
rails 指南建议的一种解决方案是从 application.rb 中的自动加载器路径中删除路径,例如config.autoload_paths -= Dir["#{config.root}/app/services/demo/"]
. 然而,这感觉就像一个猴子补丁,用于硬塞旧方式或将对象组织到新的轨道方式中。
命名空间对象的正确方法或组织它的 rails 6 方法是什么,而不仅仅是强制 rails 进入旧方式?