2011-01-07 63 views

回答

7

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

这包括在Section 6 of the Creating and Customizing Rails Generators官方指南。

+1

您的路径不适合我。第二个答案是正确的。 – ujifgc 2011-09-13 11:56:11

+3

请注意,任何寻找默认生成器模板的人都可以自定义,在撰写本文时,他们将住在GEM PATH的`gems/railties-3.x.x/lib/rails/generators`中。您可以在命令行上使用`$> gem environment`找到您的GEM PATH(s)。 – Leo 2012-09-17 15:23:54

15

为您量身定制控制文件中的正确位置是lib/templates/rails/scaffold_controller/controller.rb

+0

对不起,同样的事情。 `rails g scaffold user name:string`忽略文件。 – Oleander 2011-04-30 12:13:42

+0

谢谢,路径是正确的rails railties 3.1 – ujifgc 2011-09-13 11:54:45

12

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

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

记住你的新scaffold_controller在config/application.rb到尖轨:

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

对于my_scaffold_controller_generator.rb你可以从railties宝石,如果你想修改默认行为,或者继承它,如果你只是想复制railties-3.x.x/lib/rails/generators/rails/scaffold_controller下增加功能:

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 
6

这似乎已经使用Rails 4.略有变化可以看出哪个模板生成器将寻找在调用线产生的脚手架时,一如果您使用轨摹scaffold_controller blubs模板的位置应该是

rails generate scaffold blub 
... 
invoke responders_controller 

lib/templates/rails/scaffold_controller/controller.rb 

如果您使用轨摹ND您的模板文件夹名称应与此脚手架咕噜模板的位置应该是:

lib/templates/rails/responders_controller/controller.rb 
1

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