4

我正在尝试让自定义脚手架从我的引擎中工作。

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

更新:我还尝试覆盖 Rails ScaffoldGenerator source_path,并尝试了一些其他路径来放入我的模板,例如: lib/rails/generators/erb/scaffold/templates

4

3 回答 3

4

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,可以选择用您使用的任何语言(如 haml 或 slim)替换 erb。我知道这适用于 slim。文件名是{_form,edit,index,new,show}.html.erb.

于 2014-04-22T04:31:22.593 回答
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

于 2013-05-13T04:11:58.817 回答
1

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

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

于 2013-05-07T22:13:14.310 回答