在Rails中更改scaffold-controller-generator-templates

时间:2016-02-11 11:11:00

标签: ruby-on-rails scaffolding scaffold

当我使用Rails脚手架生成器创建我的Rails文件时,它会创建一个控制器文件。 e.g。

rails generate scaffold potato

产生

app/controllers/potatos_controller.rb

对于我的项目,我希望这个文件更具体一点。例如。我想更改此自动生成的操作:

def create
  @potato = Potato.new(potato_params)

  respond_to do |format|
    if @potato.save
      format.html { redirect_to @potato, notice: 'Potato was successfully created.' }
      format.json { render :show, status: :created, location: @potato }
    else
      format.html { render :new }
      format.json { render json: @potato.errors, status: :unprocessable_entity }
    end
  end
end

使用I18n翻译而不是硬编码'Potato已成功创建。'此外我想更改一些缩进,因为rubocop总是在抱怨它。

我找到了脚手架生成器的模板,现在想要进行更改。为此,我在我的项目中创建了一个文件: lib/templates/rails/scaffold_controller/templates/controller.rb 在这个文件中,我做了我的更改。 (例如我改变了行

redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully created.'" %>

redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} THIS IS A TEST.'" %>

但不幸的是,这些变化无效。脚手架生成器仍然使用自己的模板。那么我在这里做错了什么?我错过了一步吗?

更新 这是generate-command的输出:

rails generate scaffold potato      

Running via Spring preloader in process 31479
  invoke  active_record
  ...

  invoke  scaffold_controller
  create    app/controllers/potatos_controller.rb
  ...

铁路的屏幕截图:

Railtiesenter image description here

2 个答案:

答案 0 :(得分:6)

Rails 4显示正在使用的模板

rails generate scaffold potato
...
invoke  scaffold_controller

您应该在项目中托管修改过的模板,即
lib/templates/rails/scaffold_controller/controller.rb

请注意,Responders gem可能会更改用于生成的生成器 lib/templates/rails/responders_controller/controller.rb

答案 1 :(得分:5)

如果有人发现它有用,您可以通过在项目目录中运行此命令将默认的railties控制器脚手架模板复制到您自己的项目中:

mkdir -p lib/templates/rails/scaffold_controller && \
  cp $(bundle show railties)/lib/rails/generators/rails/scaffold_controller/templates/* \
  lib/templates/rails/scaffold_controller

如果您使用Rails 5.2和jbuilder,则应使用jbuilder脚手架作为基础:

mkdir -p lib/templates/rails/scaffold_controller && \
  cp $(bundle show jbuilder)/lib/generators/rails/templates/* \
  lib/templates/rails/scaffold_controller