在 Rails 中更改脚手架控制器生成器模板
Changing scaffold-controller-generator-templates in Rails
当我使用 Rails 脚手架生成器创建我的 Rails 文件时,它会创建一个控制器文件。例如
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 was successfully created.' 另外我想更改一些缩进,因为 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.'" %>
但遗憾的是这些更改不起作用。脚手架生成器仍然使用自己的模板。那我在这里做错了什么?我错过了一步吗?
更新:
这是生成命令的输出:
rails generate scaffold potato
Running via Spring preloader in process 31479
invoke active_record
...
invoke scaffold_controller
create app/controllers/potatos_controller.rb
...
railties截图:
Rails 4 显示您正在使用哪个模板
rails generate scaffold potato
...
invoke scaffold_controller
您应该在项目中托管修改后的模板,即
lib/templates/rails/scaffold_controller/controller.rb
.
请注意,响应者gem可能会更改用于
的发电机
lib/templates/rails/responders_controller/controller.rb
.
如果有人觉得它有用,您可以通过运行将默认的 railties controller 脚手架模板复制到您自己的项目中,在您的项目目录中执行此命令:
mkdir -p lib/templates/rails/scaffold_controller && \
cp $(bundle info railties --path)/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 info jbuilder --path)/lib/generators/rails/templates/* \
lib/templates/rails/scaffold_controller
要复制的模板是 here,您必须按照 Tim 的回答将其放在 lib/templates/rails/scaffold_controller/
中。
当我使用 Rails 脚手架生成器创建我的 Rails 文件时,它会创建一个控制器文件。例如
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 was successfully created.' 另外我想更改一些缩进,因为 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.'" %>
但遗憾的是这些更改不起作用。脚手架生成器仍然使用自己的模板。那我在这里做错了什么?我错过了一步吗?
更新: 这是生成命令的输出:
rails generate scaffold potato
Running via Spring preloader in process 31479
invoke active_record
...
invoke scaffold_controller
create app/controllers/potatos_controller.rb
...
railties截图:
Rails 4 显示您正在使用哪个模板
rails generate scaffold potato
...
invoke scaffold_controller
您应该在项目中托管修改后的模板,即
lib/templates/rails/scaffold_controller/controller.rb
.
请注意,响应者gem可能会更改用于
的发电机
lib/templates/rails/responders_controller/controller.rb
.
如果有人觉得它有用,您可以通过运行将默认的 railties controller 脚手架模板复制到您自己的项目中,在您的项目目录中执行此命令:
mkdir -p lib/templates/rails/scaffold_controller && \
cp $(bundle info railties --path)/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 info jbuilder --path)/lib/generators/rails/templates/* \
lib/templates/rails/scaffold_controller
要复制的模板是 here,您必须按照 Tim 的回答将其放在 lib/templates/rails/scaffold_controller/
中。