重定向返回错误

时间:2016-11-13 15:17:13

标签: ruby-on-rails forms ruby-on-rails-3 ruby-on-rails-4

我有一个控制器:

控制器/ 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,以便显示错误并填写住宅表单?

谢谢

1 个答案:

答案 0 :(得分:1)

通常,当创建操作中出现错误时,您将呈现&#34; new&#34;查看而不是重定向。在您的情况下,您可以尝试重定向到街道显示路径,并将@house属性作为查询参数传递。然后在StreetsController#show中,将房子参数作为参数传递给build