Zeitwerk与Rails:Domains::Article类目录结构及autoload_path疑问
解决方案
正确的目录结构
把你的领域逻辑文件直接放在app/domains目录下,删掉多余的嵌套domains子目录,最终结构是:
app/ domains/ article.rb
article.rb里的类定义保持不变:
class Domains::Article # 你的领域逻辑代码 end
配置自动加载路径
打开项目的config/application.rb,把app/domains添加到Rails的自动加载路径里:
module YourAppName class Application < Rails::Application # 保留原有配置,新增下面这行 config.autoload_paths << Rails.root.join('app', 'domains') # 如果你用的是Rails 6及以上版本(默认用Zeitwerk加载器),更推荐这么写: # Rails.autoloaders.main.push_dir(Rails.root.join('app', 'domains')) end end
为什么这么做
Rails的自动加载机制是按类名的命名空间匹配目录结构的:Domains::Article这个类,Rails会自动去domains/article.rb路径找文件。所以只要把文件放在app/domains/article.rb,同时让Rails能扫描到app/domains目录,就能正常加载类,完全没必要搞重复的app/domains/domains嵌套结构。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

