Rails 6+、zeitwerk 自动加载器和命名空间常量

2024-04-20

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 file.

如果你刚刚有Users::Create,一般的 Rails 开发人员可能会寻找app/models/users/create.rb file.

我不喜欢它的命名方式Users::CreateService,这对我来说似乎很不优雅。

我不可能是唯一一个使用这样的约定的人;还有其他人遇到过解决方案吗?我仍在浏览所有 zeitwerk 文档寻找解决方案,但尚未找到。


https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#having-app-in-the-autoload-paths https://guides.rubyonrails.org/upgrading_ruby_on_rails.html#having-app-in-the-autoload-paths

有些项目需要像 app/api/base.rb 这样的东西来定义 API::Base,并将 app 添加到自动加载路径以在经典模式下完成此任务。由于 Rails 会自动将 app 的所有子目录添加到自动加载路径中,因此我们还有另一种情况,即存在嵌套的根目录,因此安装程序不再有效。类似的原则我们在上面解释过,但也有一些担忧。

如果您想保留该结构,则需要从初始化程序中的自动加载路径中删除子目录:

ActiveSupport::Dependencies.autoload_paths.delete("#{Rails.root}/app/api")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 6+、zeitwerk 自动加载器和命名空间常量 的相关文章

  • Slim 3 自动装载机

    我是 slim 框架的新手 不知道如何使用自动加载器来自动加载我的类 我创建了一个app models myclass php但当然 当我尝试使用它时 我发现找不到课程 我不确定哪种是自动加载类的正确方法 或者我应该使用的命名约定 我应该通
  • PSR-4 自动加载不起作用

    我创建了一个app modules目录并使用 PSR 4 自动加载它 如下所示 psr 4 Modules app modules 我也做了composer dumpautoload 我有以下目录结构 app modules ModuleN
  • 如何在 Rails 6 中跳过现有项目的活动记录

    我有一个现有的 Rails 项目 它是在 API 模式下创建的 不使用数据库 在尝试部署到 Heroku 时 我收到许多与 ActiveRecord 相关的错误 gt Detecting rake tasks Could not detec
  • 如何在 webpacker Rails 6 中使 JS 函数全局化

    我尝试像以前在 Rails 5 中那样组织我的前端 我有一些带有函数的 js 文件 并根据我的需要在代码的不同位置使用了这些函数 但在 Rails 6 中 使用 js 是完全不同的 不管怎样 我想我已经了解了 packs 和 webpack
  • 将 PHPExcel 与 Composer 和 Symfony2.2 结合使用

    我在SO上找到了这个 如何在 Symfony 2 中正确使用 PHPExcel 这可行 但我想与作曲家一起使用它 我已经解决的第一部分 为特殊标签加载 PHPExcel 最后一个稳定版本 我不知道如何使用以下语法获取标签 repositor
  • php 中的自动加载是什么? [复制]

    这个问题在这里已经有答案了 PHP 中的自动加载是什么 这将对您有关 autoload 的使用有所帮助 http ditio net 2008 11 13 php autoload best practices http ditio net
  • 将自定义表单元素添加到 Adminhtml 表单

    有没有办法将自定义表单元素添加到 Magento Adminhtml 表单中 而不将自定义元素放置在lib Varian folder 我已经找到了本质上是一个的代码Varian Data Form Element factory publ
  • 有没有办法测试 PostCSS Autoprefixer 是否正常工作?专门针对 Rails 6

    我正在使用 Webpacker 编写 Rails 6 Web 应用程序 据我了解 Rails 6 中的自动前缀通过 PostCSS 及其 autoprefixer 插件开箱即用 但是我无法验证这个库是否确实是我的 css 的前缀 有没有办法
  • PHP 5.3 自动加载器

    我想使用 PSR 0 标准方式自动加载类 而不需要添加包含 例如如何用自动加载机制替换下面的代码 namespace Example use MyLib Controller include once library MyLib Contr
  • Composer 自动加载完整示例?

    我想把all https getcomposer org doc 04 schema md psr 0 the https stackoverflow com questions 15179025 unable to autoload cl
  • 递归包含所有模型子目录

    如何递归加载 models 和 lib 目录中的所有目录 在 application rb 中 我有以下几行 config autoload paths Dir Rails root join app models config autol
  • Rails 6 中的自动加载和 Zeitwerk 模式

    Rails 6 中的 Zeitwerk 模式中是否有任何代码被折旧 class Application lt Rails Application Initialize configuration defaults for originall
  • 自动加载器导致找不到类

    我正在尝试在我的 WordPress 项目中包含一个自动加载器 更具体地说 我正在开发一个插件 其中包含所有类的 Classes 目录 我希望这些类可以通过命名空间访问到我的 WordPress 项目根目录和子文件 文件夹 我觉得我的com
  • 学说、命名空间和自动加载实体

    我想在我的项目中使用 Doctrine 2 我有一些问题 我阅读了文档 但可能我做错了什么 我想自动加载实体类 并且文档中的方法不起作用 我的 bootstrap php
  • 如何在 Yii 中安装 AWS SDK

    我想在我的 Yii 项目中使用适用于 PHP 的 Amazon AWS SDK 但是我收到各种包含错误 例如include CFCredentials php failed to open stream No such file or di
  • 通过 Webpack 在 Rails 中安装 jQuery 时未定义 $

    我正在尝试通过 Webpack 在 Rails 6 0 0 rc1 中安装 jQuery 我不确定我缺少什么 但我收到了错误 is not defined尽管能够编译 jQuery 但仍会在浏览器控制台中出现 我添加了 jQueryyarn
  • Rails form_withhidden_​​field 值对新对象进行了加密

    我有一个用于创建新模型的简单表单 该模型有一个属性panel这是在控制器中设置的 我认为这应该不重要 但是panel是一个枚举 def new order Order new panel params panel end 在视图中 我创建了
  • 自动执行 rake 任务以在 Heroku 上启动时运行?

    假设有一个任务 rake startupscript 它应该在应用程序启动时运行 我们如何在heroku上自动化它 我知道有一个 heroku 调度程序 但它会每 10 分钟运行一次任务 而不是只在启动时运行一次 我也知道Procfile
  • 如何在 Rails 6 或 Rails 7 alpha 引擎中使用 jqueryUI

    如果有人能够展示在 Rails 6 或 Rails 7 Alpha 2 引擎中使用 jquery ui 所需的确切步骤 我将不胜感激 我无法让 importmap rails 在 Rails 7 引擎中工作 也无法让 webpacker 在
  • Rails 6+、zeitwerk 自动加载器和命名空间常量

    Rails 6 默认自动加载器是 zeitwerk 这似乎比以前的方法有了很大的改进 然而 zeitwork 遵循 Rails 项目的惯例 即任何内容app 是自动加载的 不需要命名空间 这非常适合app models user rb因为你

随机推荐

  • 将标准输出重定向到文件

    我正在尝试执行相当于 bash 命令的操作ls gt foo txt in C 下面的代码将输出重定向到变量 include
  • 使用 Perl 搜索并替换文件中的特定字符串[重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Perl 中替换现有文件中的字符串 https stackoverflow com questions 6994947 how to replace a string in an existi
  • 使用变量访问 JSON 值

    我正在尝试使用 jQuery 访问 JSON 数据并根据变量获取一组特定的值 我在使用 之前已经这样做过 但由于某种原因我无法弄清楚这次出了什么问题 我的 JSON 文件 由 getJSON 读取 并命名为 jsonmaker php 如下
  • 使用 swagger 或任何其他工具生成 Rest API 文档

    我正在寻找一种方法来记录我的 Rest API 我的服务器是 Tomcat Spring 服务器 Rest API 是使用 Jenkins 实现的 Swagger 似乎是一个非常酷的解决方案 但我不知道如何在我的代码中使用它 我正在寻找创建
  • Ecto 和 Elixir 的默认日期时间

    我今天刚刚开始使用 Elixir 和 Phoenix 我正在尝试添加 Ecto 作为映射器 但我在使用时间时遇到了一些问题 这是我的模型 schema users do field name string field email strin
  • Python 字符串不是不可变的吗?那为什么a + " " + b 会起作用呢?

    我的理解是 Python 字符串是不可变的 我尝试了以下代码 a Dog b eats c treats print a b c Dog eats treats print a b c Dog eats treats print a Dog
  • 在现有数据表中添加按顺序编号的新列的最佳方法

    我有一个非空数据表 添加另一列 从 1 开始按顺序编号 的最佳方法是什么 我尝试了以下代码 但没有成功 DataColumn dc new DataColumn Col1 dc AutoIncrement true dc AutoIncre
  • DIV 高度设置为屏幕百分比?

    我希望将父 DIV 设置为 100 屏幕高度的 70 我已经设置了以下 CSS 但它似乎没有做任何事情 body font family Noto Sans sans serif margin 0 auto height 100 width
  • 重载运算符 == 与 Equals()

    我正在开发一个 C 项目 到目前为止 我已经使用不可变对象和工厂来确保类型的对象Foo总是可以比较是否相等 Foo对象一旦创建就无法更改 并且工厂始终为给定的参数集返回相同的对象 这非常有效 并且在整个代码库中我们假设 始终致力于检查相等性
  • postgresql - 将布尔列添加到表集默认值

    这是正确的 postgresql 语法 可以将列添加到表中 默认值为false ALTER TABLE users ADD priv user BIT ALTER priv user SET DEFAULT 0 Thanks ALTER T
  • 突变观察者可以监听“数据”属性的变化吗?

    所以问题是我有一个 html 元素 它在 data 属性中有一个对象 通过 jQuery ofc 设置 并且我想监听该属性的更改 我已经尝试了很多事情 比如在MutationObserverInit 对象 https developer m
  • 什么时候使用 git rm -f ?

    我正在学习 Git 无法理解在发出 git rm 命令时使用 f 标志的条件 请解释一下需要 rm f 而不是仅 rm 的情况 解释 The f如果文件与您上次签出的提交不是最新的 则用于删除该文件 这是为了防止您删除已进行更改但尚未签入的
  • Javascript,如何读取本地文件?

    我尝试从服务器读取本地文件 我已经 谷歌 这个话题有一段时间了 有些人说这是不可能的 有些人说这是可以做到的 在搜索过程中我发现了这个脚本 使用 xmlhttprequest 读取文件 如果您的 javascript 应用程序的 HTML
  • 如何在 jQuery keyup 事件中实现 debounce fn?

    计算基于用户输入 标准是使用keyup而不是change or blur 问题是代码在每次击键时都会触发 而我需要它在 500 毫秒超时后仅延迟并触发一次 我下面的例子显然不起作用 附加了小提琴 我找到了大卫 沃尔什的dbounce功能 但
  • .NET 4 自旋锁

    以下测试代码 F 未返回我期望的结果 let safeCount let n 1000000 let counter ref 0 let spinlock ref lt SpinLock false let run i0 i1 for i
  • 在 Kotlin 中使用 Room 的 @ForeignKey 作为 @Entity 参数

    我遇到了一个房间tutorial https android jlelse eu android architecture components room relationships bf473510c14a这利用了 PrimaryKey类
  • 如何将 NSDictionary 转换为自定义对象

    我有一个 json 对象 interface Order NSObject property nonatomic retain NSString OrderId property nonatomic retain NSString Titl
  • Redhat 的 RHEL8 相当于“apk add --no-cache gcc musl-dev linux-headers”

    我正在尝试使用安装在 RedHat enterprise linux 7 8 映像上的 Python 上的 https docs docker com compose gettingstarted 中的示例代码 此行出现错误 127 RUN
  • 在不阻塞的情况下“通知”处理器的正确方法是什么?

    假设我有很多东西 我必须对所有这些东西进行一些操作 如果一个元素的操作失败 我想停止整个阵列的工作 这项工作分布在多个处理器上 我想实现这一目标 同时将发送 接收的消息数量保持在最低限度 另外 如果没有必要 我不想阻止处理器 我该如何使用
  • Rails 6+、zeitwerk 自动加载器和命名空间常量

    Rails 6 默认自动加载器是 zeitwerk 这似乎比以前的方法有了很大的改进 然而 zeitwork 遵循 Rails 项目的惯例 即任何内容app 是自动加载的 不需要命名空间 这非常适合app models user rb因为你