如何覆盖 gem 中的 Rails 生成器模板?

2024-03-21

当您想要覆盖生成器模板(而不替换生成器本身)时,在 Rails 3 中,您只需将文件拖放到 lib/templates 中适当命名的位置,Rails 就会找到它们。

如果你想用宝石来做到这一点怎么办?我正在尝试采用我团队的标准化脚手架格式并将其宝石化,以便我们可以在所有项目中共享它并轻松更新它,而不是在每个项目中将文件复制到 lib/ 中。这对于我创建了一个新生成器的情况来说效果很好;我用 application.rb 中的 config.generators 连接到它,Rails 找到了它。但是当我将模板文件放入 lib/templates 中时gem,Rails 首先找到自己的默认模板,然后渲染它们而不是我的。我认为搜索顺序是 RAILS_ROOT/lib/templates、RAILS_GEMS/lib/templates、OTHER_GEMS/lib/templates。

解决办法是什么?我没有找到太多关于此的文档,并且通过 Rails 进行代码挖掘也没有提供明显的解决方案。谢谢!


更新:IdahoEv 有正确的答案,但从 3.1 开始,此代码会产生以下贬值警告:

DEPRECATION WARNING: config.generators in Rails::Railtie is deprecated. Please use config.app_generators instead.

所以用这个代替:

module MyGem
  class Railtie < Rails::Railtie
    config.app_generators do |g|
      g.templates.unshift File::expand_path('../templates', __FILE__)
    end 
  end
end 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何覆盖 gem 中的 Rails 生成器模板? 的相关文章

随机推荐

  • 我的项目中 SDL2 的链接器错误

    我使用 CMake 和 Code Blocks 从源代码构建 SDL2 并尝试将我自己的项目源链接到以下静态库 libSDL2 a libSDL2main a OpenGL32 lib 这三个库包含在称为 libdir 我使用批处理命令 我
  • 一个可定制的 diff 工具,可以生成报告(XML、HTML 格式)

    我想为非回归测试提供差异报告 我的程序是基于 Java 的 但我没有找到任何 API 来满足我的需求 因此 我使用外部工具 CSDiff 它接受 2 个文件作为参数并返回 HTML 报告 这很好而且很容易设置 现在我遇到的唯一问题是 HTM
  • iPhone——当 alpha 设置为零时,为什么 UIViews 上的 TouchBegan 不触发?

    是否正在进行一些优化以删除视图或其他内容 尽管我已经将其设置为透明 但我仍然希望它能够接收触摸事件 如果 alpha 0 这些事件似乎不会触发 你说得对 在透明视图上检测不到触摸 http developer apple com iphon
  • 1024px宽度的屏幕和1024px宽度的平板电脑是冲突的

    我正在使用 MediaQuery 创建响应式网站布局 如下所示 除了一个邪恶的问题外 一切正常 core css 默认应用于站点 它是桌 面版本的样式表 但正如您在此链接中看到的 当屏幕宽度为 1024px 或以下时 它将链接到 table
  • 无论页数如何,pyPdf 输出文件的大小都相同

    我正在尝试使用 pyPdf 将大型 pdf 中的几页提取到单独的文件中 每当我这样做时 生成的文件大小几乎与源文件相同 我认为这与文件内的书签有关 因为如果页面不包含任何链接 输出文件的大小会非常小 我不知道如何从输出文件中排除书签 fro
  • 如何用不同的颜色绘制填充路径/形状

    我需要为屏幕上的形状着色任何我想要的颜色 我目前正在尝试使用 UIImage 来做到这一点 我想根据我的愿望重新着色 据我所知 做到这一点的唯一方法是获取 UIImage 的各个像素 这需要我编写更多行代码来解决这个问题 除了我写的之外 还
  • 如何在下面顶部的集合视图中添加部分标题

    我正在使用带有搜索栏的集合视图 我通过 cod 添加了搜索栏 起始位置为 0 0 从顶部开始 所以现在我的图像看起来像这样 在此处输入图像描述 1 1 但我需要将标题转到我的搜索栏 我是通过故事板完成的 但是在运行时 我的标题名称和搜索栏具
  • 带文本的 QToolButton:覆盖最小高度以模仿常规按钮高度

    我正在显示Q工具按钮 http doc qt io qt 5 qtoolbutton html带有图标加文本的 s Qt 图标旁边的工具按钮文本 http doc qt io qt 5 qt html ToolButtonStyle enu
  • PHP 不从数据库发布信息

    我正在尝试从我创建的数据库发布信息 但它不起作用 我不断收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在第 1 行 Content Calendar ORDER BY Program 附近使用的正
  • 有没有办法获取java文件/行号?

    在 C C 中 文件名由以下命令返回FILE行号由返回LINE Java确实有一个getFileName 但似乎没有对应的getLineNumber 如果能够做这样的事情那就太好了 catch Exception e System err
  • UIGraphicsGetImageFromCurrentImageContext() 视网膜分辨率?

    我正在给我的屏幕拍照并使用UIGraphicsGetImageFromCurrentImageContext 一切都运转良好 然而 在 iPhone 4 上 分辨率看起来相当糟糕 因为它使用的图像似乎是标准分辨率 而不是 2x 有什么方法可
  • 我可以使用自制软件在 x86_64 上安装 arm64 库吗?

    我正在 x86 64 MacOS 11 上针对 arm64 架构进行交叉编译 clang XCode 支持它 但当需要外部库时我遇到问题 例如 让它成为提升 我知道arm64的瓶子是可用的 但看起来没有办法选择它来安装 arch arm64
  • ggtern 破坏 ggplot2 并生成没有轴标签等的图

    我注意到 自从ggplot2发布了他们的新版本 3 3 0 我无法再使用该包ggtern 因为它完全破坏了我用ggplot2 library ggplot2 df lt data frame x c 1 2 y c 2 1 ggplot d
  • 在 SQL 中连接多个表

    有人可以向我解释一下连接吗 内连接根据where条件选择公共数据 左外连接从左表中选择所有数据 而不考虑公共数据 但从右表中获取公共数据 右外连接反之亦然 我知道基础知识 但当涉及到 5 8 10 个以上的表时 问题仍然存在 假设我有 10
  • 在构建期间设置 web.config 属性(而不是通过发布)

    我正在尝试使用 Web 安装项目部署应用程序 我遇到的问题是 web config 文件从未被转换 根据这个post https stackoverflow com questions 3922291 use visual studio w
  • 使用解决方案文件夹时没有 CMakePredefinedTargets

    在 CMake 中使用 VS 解决方案文件夹时 使用 set property GLOBAL PROPERTY USE FOLDERS ON set target properties MyProject PROPERTIES FOLDER
  • 如何在 Windows Forms 2.0 中从子窗体关闭父窗体?

    我需要从 Windows 应用程序的子窗体中关闭父窗体 最好的方法是什么 我遇到了这个博客条目 看起来它可以工作 并且它使用了 D2VIANT 答案中的事件处理程序概念 http www dotnetcurry com ShowArticl
  • Ghost脚本错误

    在特定 PDF 上 运行以下命令时 gs dSAFER dBATCH dNOPAUSE dQUIET dFirstPage 1 dLastPage 1 sDEVICE pdfwrite sOutputFile output pdf inpu
  • 如何克隆 JAXB 对象

    我有一些需要克隆的 jaxb 对象 由 jaxb 从 xsd 生成的代码实例化 Jaxb 类似乎没有提供可以轻松完成此操作的接口 我无法手动编辑该类 也无法扩展它 所以我需要创建一个帮助器 实用方法来执行此操作 最好的方法是什么 鉴于 JA
  • 如何覆盖 gem 中的 Rails 生成器模板?

    当您想要覆盖生成器模板 而不替换生成器本身 时 在 Rails 3 中 您只需将文件拖放到 lib templates 中适当命名的位置 Rails 就会找到它们 如果你想用宝石来做到这一点怎么办 我正在尝试采用我团队的标准化脚手架格式并将