对于一个大学项目,我希望对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,但这甚至是更多的裸露内容。
长话短说,我是在做错什么,还是在脚手架的控制器代码在哪里生成?
仅供参考,我在commit a1f9fe8bdd4e6c4e20fbda424c0ecf2f31fabd30处克隆了rails,并从那里分支了。