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

时间:2011-01-07 22:37:16

标签: ruby-on-rails

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

这可能吗?

5 个答案:

答案 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中报告了一个问题。希望它很快就能解决。