Rails: URL-адрес после сбоя проверки при создании новых записей через форму

Допустим, я создаю новый Foo с помощью формы и стандартного контроллера отдыха Rails, который выглядит примерно так:

class FoosController < ApplicationController
  ...
  def index
    @foos = Foo.all
  end

  def new
    @foo = Foo.new
  end

  def create
    @foo = Foo.create(params[:foo])
    if @foo.save
      redirect_to foos_path, :notice => 'Created a foo.'
    else
      render 'new'
    end
  end
  ...
end

Итак, если Я использую стандартный спокойный контроллер (как указано выше), затем, когда я создаю Foo, я нахожусь по адресу example.com/foos/new , и если я отправляю форму, и она правильно сохраняется, я нахожусь в example.com/foos , показывающий действие индекса. Однако, если форма не заполнена правильно, форма снова отображается и отображаются сообщения об ошибках. Это все обычная ваниль.

Однако, если отображаются ошибки, страница формы будет отображена, но URL-адрес будет example.com/foos , потому что действие CREATE отправляется по этому URL-адресу. Однако можно было бы ожидать найти индекс Foos # на example.com/foos , а не форму, которую они только что отправили с добавленными сообщениями об ошибках.

Это кажется стандартным поведением Rails, но не Для меня это не имеет большого смысла. Очевидно, я мог бы перенаправить обратно на новый вместо рендеринга нового из действия create, но проблема в том, что сообщения об ошибках и т. Д. Будут потеряны вместе с частично заполненными Foos в памяти.

Есть ли чистое решение этой проблемы , способ отправить людей обратно на example.com/foos/new , если в новой форме Foo, которую они отправили, есть ошибки?

Спасибо!

19
задан Andrew 18 March 2011 в 04:00
поделиться