我有一个控制器:
控制器/ streets_controller.rb
class StreetsController < ApplicationController
before_action :set_street, only: [:show, :edit, :update, :destroy]
def show
@house = @street.houses.build
end
.......
该show
行动的观点。在那里,我还展示了一个用于创建新街道房屋的表格:
的观点/街道/ show.html.erb
<h1>Street</h1>
<p>@street.name</p>
<%= render '/houses/form', house: @house %>
当有人提交houses/form
时,请求会转到 houses_controller.rb
class HousesController < ApplicationController
def create
@house = House.new(house_params)
respond_to do |format|
if @house.save
format.html { redirect_back(fallback_location: streets_path) }
format.json { render :show, status: :created, location: @house }
else
format.html { redirect_back(fallback_location: streets_path) }
format.json { render json: @house.errors, status: :unprocessable_entity }
end
end
end
到目前为止,当某人插入正确的house_params
时,它会重定向并正确创建房屋
但是当某人插错house_params
时,它会重定向,但它不会在表单中显示房屋错误,它会显示新房子的表单@house = @street.houses.build
如何使用StreetsController
对象重定向到@house
,以便显示错误并填写住宅表单?
谢谢
答案 0 :(得分:1)
通常,当创建操作中出现错误时,您将呈现&#34; new&#34;查看而不是重定向。在您的情况下,您可以尝试重定向到街道显示路径,并将@house
属性作为查询参数传递。然后在StreetsController#show
中,将房子参数作为参数传递给build
。