我为rails 3中的控制器创建了一个生成器。 现在我想在使用脚手架生成器时将此生成器用作默认生成器。
这可能吗?
答案 0 :(得分:15)
自定义控制器文件的正确位置为lib/templates/rails/scaffold_controller/controller.rb
答案 1 :(得分:12)
如果您只是想使用自己的控制器模板,可以将其放在lib/templates/rails/scaffold_controller/controller.rb
例如,如果要替换scaffold_controller_generator
代码本身,以便控制器脚手架生成其他类文件。您可以使用lib/generators/rails/my_scaffold_controller/my_scaffold_controller_generator.rb
下的模板创建lib/generators/rails/my_scaffold_controller/templates
。
请记住在config/application.rb
中的新scaffold_controller指向rails:
config.generators do |g|
g.scaffold_controller = "my_scaffold_controller"
end
对于my_scaffold_controller_generator.rb
,如果您想要修改默认行为,可以从railties-3.x.x/lib/rails/generators/rails/scaffold_controller
下的railties gem复制,如果您只想添加功能,则可以从中继承:
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
答案 2 :(得分:7)
您可以覆盖Rails用于其生成器的模板。在这种情况下,只需将文件放在lib/templates/scaffold_controller/controller.rb
并按您的意愿修改即可。下次运行rails g scaffold [modelName]
时,它将获取此新控制器模板并使用它。
Section 6 of the Creating and Customizing Rails Generators官方指南中介绍了这一点。
答案 3 :(得分: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
答案 4 :(得分:1)
如果有人想知道为什么这在默认的Rails 4安装中不起作用,那是因为jbuilder在覆盖位置之前将自身插入到模板路径中。我不需要jbuilder所以我删除它,但我也在Github中报告了一个问题。希望它很快就能解决。