首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类中嵌套的Zeitwerk和模块

类中嵌套的Zeitwerk和模块
EN

Stack Overflow用户
提问于 2022-02-09 21:58:51
回答 1查看 629关注 0票数 0

我在用Rails应用程序从经典的自动加载程序切换到Zeitwerk时遇到了一些麻烦,它在Rails 3天里看到了曙光--所以这里有一些外壳。

一些模型代码已被提取到模块中,并且这些模块嵌套在模型类(充当命名空间)中:

代码语言:javascript
复制
# app/models/donation
class Donation < ApplicationRecord
  (...)
end

# app/models/donation/download
class Donation
  module Download
    def csv
      (...)
    end
  end
end

然后在需要时动态使用这些模块:

代码语言:javascript
复制
donation = Donation.find(...)
donation.extend(Donation::Download).csv

由于app/models中的子目录在默认情况下没有添加,所以它是在application.rb中显式地完成的

代码语言:javascript
复制
Dir[
  "#{config.root}/app/models/*/"
].then do |paths|
  config.autoload_paths += paths
  config.eager_load_paths += paths
end

eager_load_paths是Zeitwerk所必需的(根据Rails指南),但是Zeitwerk似乎不喜欢这个星座:

代码语言:javascript
复制
% rails zeitwerk:check
Hold on, I am eager loading the application.
expected file app/models/donation/download.rb to define constant Download

奇怪,因为Download是在那里定义的。你知道这是怎么回事吗?怎样才能最好地改造东西来和Zeitwerk合作呢?

谢谢你的暗示!

EN

回答 1

Stack Overflow用户

发布于 2022-02-17 21:31:56

嗯,这应该是开箱即用的,在我看来就像一个常规的装置。

由于app/models在自动加载路径中,DonationDonation::Download将被自动加载,因此不需要自定义配置。

如果他们不这样做,应用程序必须做一些古怪的事情。我们可以调试它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71057288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档