我正在尝试让自定义脚手架从我的引擎中工作。
我遵循了一些关于在普通 Rails 应用程序中自定义 Rails 3.2 脚手架的教程,并将自定义模板放在引擎/lib/templates/erb/scaffold目录中,但包含引擎的应用程序不会拾取它们。有什么建议么?
更新:我还尝试覆盖 Rails ScaffoldGenerator source_path
,并尝试了一些其他路径来放入我的模板,例如:
lib/rails/generators/erb/scaffold/templates
我正在尝试让自定义脚手架从我的引擎中工作。
我遵循了一些关于在普通 Rails 应用程序中自定义 Rails 3.2 脚手架的教程,并将自定义模板放在引擎/lib/templates/erb/scaffold目录中,但包含引擎的应用程序不会拾取它们。有什么建议么?
更新:我还尝试覆盖 Rails ScaffoldGenerator source_path
,并尝试了一些其他路径来放入我的模板,例如:
lib/rails/generators/erb/scaffold/templates
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
.
在声明引擎的文件中,使用以下命令:
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
您是在谈论控制器模板吗?比你使用错误的目录。将您的模板保存在
lib/templates/rails/scaffold_controller/controller.rb
例如,请查看http://xyzpub.com/en/ruby-on-rails/3.2/templates.html。