覆盖rails 3中的默认脚手架生成器

我已经为rails 3中的控制器创建了一个生成器。现在我想在使用脚手架生成器时将此生成器用作默认生成器。

那可能吗?

自定义控制器文件的正确位置是lib/templates/rails/scaffold_controller/controller.rb

如果您只想使用自己的控制器模板,可以将它放在lib/templates/rails/scaffold_controller/controller.rb

例如,如果要替换scaffold_controller_generator代码本身,以便控制器脚手架生成其他类文件。 你可以使用lib/generators/rails/my_scaffold_controller/my_scaffold_controller_generator.rb templates下的模板创建lib/generators/rails/my_scaffold_controller/my_scaffold_controller_generator.rb

记得在config/application.rb新scaffold_controller上指向rails:

 config.generators do |g| g.scaffold_controller = "my_scaffold_controller" end 

对于my_scaffold_controller_generator.rb ,如果要修改默认行为,可以从railties-3.xx/lib/rails/generators/rails/scaffold_controller下的railties gem复制,如果只想添加function,则可以从它inheritance:

 require 'rails/generators/rails/scaffold_controller/scaffold_controller_generator' module Rails module Generators class MyScaffoldControllerGenerator < ScaffoldControllerGenerator source_root File.expand_path("../templates", __FILE__) def new_funtionality end end end end 

您可以覆盖Rails用于其生成器的模板。 在这种情况下,只需将文件放在lib/templates/scaffold_controller/controller.rb然后根据需要进行修改。 下次运行rails g scaffold [modelName] ,它将获取这个新的控制器模板并使用它。

“创建和自定义Rails生成器”官方指南的第6节对此进行了介绍。

这似乎与Rails 4略有不同。您可以看到生成脚手架时生成器将在调用行中查找哪个模板,并且您的模板文件夹名称应与此匹配:

 rails generate scaffold blub ... invoke responders_controller 

如果你使用rails g scaffold_controller blubs ,模板的位置应该是:

 lib/templates/rails/scaffold_controller/controller.rb 

如果你使用的是rails g scaffold blub ,模板的位置应该是:

 lib/templates/rails/responders_controller/controller.rb 

如果有人想知道为什么这不能在默认的Rails 4安装中工作,那是因为jbuilder在覆盖位置之前将自身插入到模板路径中。 我不需要jbuilder所以我删除了它,但我也在Github中报告了一个问题。 希望它很快就能解决。