首页 > 解决方案 > Rails 控制器脚手架代码

问题描述

对于一个大学项目,我希望对 Rails 脚手架机制进行一些更改。主要是想知道控制器脚手架代码是在哪里生成的。

在查看代码的生成位置时,我发现这里看起来像适当的位:https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/scaffold_controller/templates/controller。 rb.tt

不过改了之后好像没什么区别。我都试过了rails g scaffold ....rails g scaffold_controller ...

我还注意到我最终得到的代码看起来与我对模板的期望不同。

模板:

# PATCH/PUT <%= route_url %>/1
def update
  if @<%= orm_instance.update("#{singular_table_name}_params") %>
    redirect_to <%= redirect_resource_name %>, notice: <%= "'#{human_name} was successfully updated.'" %>
  else
    render :edit
  end
end

现实(dogs_controller.rb):

# PATCH/PUT /dogs/1
# PATCH/PUT /dogs/1.json
def update
  respond_to do |format|
    if @dog.update(dog_params)
      format.html { redirect_to @dog, notice: 'Dog was successfully updated.' }
      format.json { render :show, status: :ok, location: @dog }
    else
      format.html { render :edit }
      format.json { render json: @dog.errors, status: :unprocessable_entity }
    end
  end
end

所以主要是生成的代码也响应 json 请求,而模板看起来并不尊重这一点。

脚手架控制台输出也声称invoke scaffold_controller.

然后这里还有代码:https ://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/controller/templates/controller.rb.tt但那更简单。

长话短说,我做错了什么或者脚手架的控制器代码在哪里生成。

仅供参考,我在提交 a1f9fe8bdd4e6c4e20fbda424c0ecf2f31fabd30 处克隆了 rails 并从那里分支,所以最近。

标签: ruby-on-railsrubyscaffolding

解决方案


推荐阅读