Rails引擎中的自定义视图脚手架

时间:2013-05-07 13:52:19

标签: ruby-on-rails ruby-on-rails-3.2 scaffolding rails-engines

我正在尝试从我的引擎中使用自定义脚手架。

我遵循了一些关于在普通Rails应用程序中自定义Rails 3.2脚手架的教程,并将我的自定义模板放在引擎 / lib / templates / erb / scaffold 目录中,但它们没有被提取包含引擎的应用程序。有什么建议吗?

更新: 我还试图覆盖Rails ScaffoldGenerator的source_path,并尝试了一些其他路径来放入我的模板,例如: 的 LIB /轨道/发电机/ ERB /支架/模板

3 个答案:

答案 0 :(得分:3)

在您声明引擎的文件中使用此命令:

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

答案 1 :(得分:3)

扎拉赞的回答让我大部分都在那里,但是有一些问题。这对我有用:

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。)我知道这适用于苗条。文件名为{_form,edit,index,new,show}.html.erb

答案 2 :(得分:1)

您在谈论控制器模板吗?比你使用错误的目录。保存模板 lib/templates/rails/scaffold_controller/controller.rb

请查看http://xyzpub.com/en/ruby-on-rails/3.2/templates.html示例。