如何将Zeitwerk命名空间全部折叠至根层级?
解决方案
要让booking/actions/create.rb直接映射到根命名空间的Create类,你需要通过Zeitwerk的push_dir方法,明确指定该目录对应的命名空间为根命名空间(即Object),而非继承父目录的嵌套命名空间。
具体配置代码如下:
loader = Zeitwerk::Loader.new # 将booking/actions目录绑定到根命名空间 loader.push_dir("#{__dir__}/booking/actions", namespace: Object) # 若需加载根目录下的其他文件(比如booking.rb),继续添加该目录 loader.push_dir(__dir__) loader.setup
补充说明
namespace: Object参数的作用是告诉Zeitwerk:该目录下所有文件对应的类/模块,直接归属根命名空间,无需嵌套在Booking::Actions或Booking之下。- 上述配置会保留对根目录的加载逻辑,因此
booking.rb仍会正常映射为Booking类,两者互不干扰。 - 需注意:要确保根命名空间下没有其他同名的
Create类/模块,否则会触发命名冲突。
内容的提问来源于stack exchange,提问作者Mirror318
相关产品推荐
相关产品推荐

