Rails 6+ 默认的自动加载器是 zeitwerk,这似乎比以前的方法有了很大的改进。
但是,zeitwork 遵循 Rails 项目的约定,其中的任何内容app/*
都是自动加载的,不需要命名空间。
这非常有用,app/models/user.rb
因为您不必使用Models::User
但可以参考User
.
但是,我添加了自己的app/services
目录并将我的服务对象命名为Services::Users::Create
,这将映射到app/services/users/create.rb
.
Zeitwork 抛出了我的类常量不存在的错误,因为它是预期Users::Create
的(没有Services::
前缀)。
无论如何配置 zeitwork 以Services::
在这些实例中需要命名空间?Services::Users::Create
在我看来,阅读代码并知道您正在查看app/services/users/create.rb
文件会更干净。
如果您刚刚拥有Users::Create
,一般的 Rails 开发人员可能会查找该app/models/users/create.rb
文件。
我不喜欢命名它的方法Users::CreateService
,这对我来说似乎很不雅。
我不能是唯一一个使用这样的约定的人;有没有其他人遇到过解决方案?我仍在浏览所有 zeitwerk 文档以寻找解决方案,但还没有找到解决方案。