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

Lin*_*der 14 ruby-on-rails

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

那可能吗?

Iwa*_* B. 15

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


jac*_*ipe 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.

请记住在新的scaffold_controller中指向rails config/application.rb:

config.generators do |g|
  g.scaffold_controller = "my_scaffold_controller"
end
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)


Rya*_*igg 7

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

这将在创建和自定义Rails生成器官方指南的第6节中介绍.

  • 请注意,任何寻找默认生成器模板的人都要自定义,在撰写本文时,他们会在`gems/railties-3.xx/lib/rails/generators`中的GEM路径中生存.您可以在命令行上使用`$> gem environment`找到您的GEM PATH. (3认同)

Ken*_*ant 6

This seems to have changed slightly with Rails 4. You can see which template the generator will look for in the invoke line when the scaffold is generated, and your template folder name should match this:

rails generate scaffold blub 
...
invoke  responders_controller
Run Code Online (Sandbox Code Playgroud)

If you're using rails g scaffold_controller blubs the location of the template should be:

lib/templates/rails/scaffold_controller/controller.rb
Run Code Online (Sandbox Code Playgroud)

If you're using rails g scaffold blub the location of the template should be:

lib/templates/rails/responders_controller/controller.rb
Run Code Online (Sandbox Code Playgroud)