Ruby on rails 在Rails中更改脚手架控制器生成器模板

Ruby on rails 在Rails中更改脚手架控制器生成器模板,ruby-on-rails,scaffolding,scaffold,Ruby On Rails,Scaffolding,Scaffold,当我使用Rails脚手架生成器创建Rails文件时,它会创建一个控制器文件。e、 g rails生成脚手架土豆 生成: app/controllers/potatos\u controller.rb 对于我的项目,我希望这个文件更具体一点。例如,我想更改此自动生成的操作: def create @potato = Potato.new(potato_params) respond_to do |format| if @potato.save format.html

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

rails生成脚手架土豆

生成:

app/controllers/potatos\u 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翻译,而不是硬编码的“土豆成功创建了”。此外,我还想更改一些缩进,因为rubocop总是抱怨它

我已经找到脚手架生成器的模板,现在要进行更改。为此,我在项目中创建了一个文件:
lib/templates/rails/scaffold\u controller/templates/controller.rb
在此文件中,我已进行了更改。(例如,我换了线路

redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully created.'" %>
铁轨的屏幕截图:


Rails 4向您展示了正在使用的模板

rails generate scaffold potato
...
invoke  scaffold_controller
您应该在项目中托管修改后的模板,即
lib/templates/rails/scaffold\u controller/controller.rb

请注意,响应者gem可能会更改用于

lib/templates/rails/responders\u controller/controller.rb

如果任何人认为它有用,您可以通过在项目目录中运行以下命令将默认的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

谢谢你的提示。我检查了生成器的输出,它说它调用了
scaffold\u controller
——我正试图编辑的那个。(请参阅更新的问题)这很有趣。你能试着编辑一下
responders\u controller
,看看会发生什么吗?我还添加了一个屏幕截图,显示我的rails生成器的目录结构不正确。似乎没有responders\u controller。我试图在我的项目中创建该文件,但对结果没有任何影响。我的,
responders\u controller不好
由响应者gem定义(由Desive使用)。您应该将修改后的模板放入您的项目中,即
lib/templates/rails/scaffold\u controller/controller.rb
。也可以尝试不使用
spring
。如果不重新启动,它可能无法加载您的模板。您的问题是谁解决的?我尝试使用Mihai answer,但不起作用。嘿,我也遇到了同样的问题,我觉得那里有代码与生成的代码不一样。您是否找到代码生成的位置?不,我决定我不在乎。当我使用此方法时,它会按预期覆盖模板。但是,生成的代码与没有覆盖的代码不一样。我似乎是错误的模板。原始代码:当我使用此方法时,它会覆盖template与预期的一样。但是,生成的代码不同。原始生成的代码用于json和html格式的响应。复制的模板仅生成html响应的代码。我将很快更新此内容-json和html控制器模板位于
jbuilder
gem中。
mkdir -p lib/templates/rails/scaffold_controller && \
  cp $(bundle show railties)/lib/rails/generators/rails/scaffold_controller/templates/* \
  lib/templates/rails/scaffold_controller
mkdir -p lib/templates/rails/scaffold_controller && \
  cp $(bundle show jbuilder)/lib/generators/rails/templates/* \
  lib/templates/rails/scaffold_controller