当您想要覆盖生成器模板(而不替换生成器本身)时,在 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(使用前将#替换为@)