Допустим, я создаю новый 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, которую они отправили, есть ошибки?
Спасибо!