equ*_*nt8 2 rubygems ruby-on-rails ruby-on-rails-3 ruby-on-rails-4
我知道如何在gem中覆盖Rails模板,但是如何在Rails应用程序中覆盖gem generator模板
例如:https : //github.com/elabs/pundit/blob/master/lib/generators/pundit/policy/templates/policy.rb
要么
https://github.com/drapergem/draper/blob/master/lib/generators/rails/templates/decorator.rb
这样就rails g decorator Foo可以生成我的模板,而不是gem本机模板
谢谢
在Rails 3.0及更高版本中,生成器不仅在源根目录中查找模板,而且还在其他路径中搜索模板。其中之一是lib / templates。
因此,如果您模仿要尝试覆盖的gem / tamplate的目录层次结构,rails将选择您的模板,而不是gem源中的模板
更新:
现在,问题是如何正确模拟该层次结构,以便Rails选择您的模板?
好吧,事实证明这是一条规则| 模式,例如,如果您想在此路径中覆盖模板:lib/generators/pundit/policy/templates/policy.rb
您应该将模板放在 lib/templates/pundit/policy/policy.rb
覆盖 lib/generators/rails/templates/decorator.rb
您应该将模板放在 lib/templates/rails/decorator/decorator.rb
更新2
似乎该模式正在流动: lib/templates/gem_name/generator_name/template_file_name.rb
在使用Draper gem的情况下,gem会强制自己像本机的Rails生成器一样工作:
/draper/lib/generators/rails/templates/decorator.rb
...所以这就是为什么我们需要使用:
lib/templates/rails/generator_name/template_file_name.rb。
要覆盖Draper gem的RSpec模板生成器:
lib/templates/rspec/generator_name/template_file_name.rb
...等等
| 归档时间: |
|
| 查看次数: |
891 次 |
| 最近记录: |