Rails引擎中的自定义视图脚手架
我正在尝试从我的引擎中获取自定义脚手架。
我按照一些教程在普通的Rails应用程序中自定义Rails 3.2脚手架,并将我的自定义模板放在engines / lib / templates / erb / scaffold目录中,但它们不会被包含引擎的应用程序选中。 有什么建议?
更新:我还尝试覆盖Rails ScaffoldGenerator的source_path
并尝试了一些其他路径来放入我的模板,例如: lib / rails / generators / erb / scaffold / templates
在您声明引擎的文件中使用此命令:
class Engine < Rails::Engine config.app_generators do |g| g.templates.unshift File::expand_path('../templates', __FILE__) end end
它应该改变默认情况下Rails使用的模板文件夹的首选项。
现在只需将模板文件放在lib / templates / erb / scaffold / template_name.erb中
其中template_name是以下之一:_form.html.erb,edit.html.erb,index.html.erb,new.html.erb,show.html.erb
一旦你包含了gem,你应该能够像往常一样使用rails generate scaffold命令。
以下是覆盖rails中默认支架的引擎示例:
https://github.com/brocktoncg/gemboree
这是模板目录所在的位置:
https://github.com/brocktoncg/gemboree/tree/master/lib/templates/erb/scaffold
zarazan的回答让我大部分都在那里,但是有一些问题。 这对我有用:
class Engine < Rails::Engine config.generators do |g| g.templates.unshift File::expand_path('../../templates', __FILE__) end end
请注意,这在generators
部分, 而不是 app_generators
,并且路径略有不同。
此外,我认为存储模板的正确路径是lib/templates/erb/scaffold
,可选择用你正在使用的任何语言替换erb(比如haml或slim。)我知道这适用于slim。 文件名是{_form,edit,index,new,show}.html.erb
。
你在谈论控制器模板吗? 比你使用错误的目录。 将模板保存在lib/templates/rails/scaffold_controller/controller.rb
有关示例,请查看http://xyzpub.com/en/ruby-on-rails/3.2/templates.html 。