2016-11-13 2 views
0

У меня есть контроллер:Перенаправление назад с ошибками

контроллер/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 это redirects_back, но он не показывает ошибки дома в форме, он показывает форму для нового дома @house = @street.houses.build

Как я могу переадресовать к StreetsController с @house объект, чтобы отображались ошибки, а также заполнялась форма дома?

Благодаря

+0

Каковы возможные страницы, на которые пользователь может быть перенаправлен обратно? –

ответ

1

Обычно, когда есть ошибка в создании действия, вы оказали бы «новый» вид, а не перенаправлять обратно. В вашем случае вы можете попробовать перенаправить на путь отображения улиц и передать атрибуты @house в качестве параметров запроса. Затем в StreetsController#show передайте параметры дома в качестве аргумента build.

Смежные вопросы