A maneira correta de lidar com envios de formulários inválidos no Rails

Eu sou novo no Rails e não tenho certeza se concordo com a maneira como fiz as coisas em alguns dos tutoriais pelos quais passei. O problema tem a ver com como lidar com envios de formulários inválidos. A maneira padrão de fazer as coisas parece ser:

class ThingsController < ApplicationController


  # POST /things
  def create

    @thing = Thing.new(params[:thing])

    if @thing.save
      flash[:notice] = 'Thing created'
      redirect_to(@thing)
    else
      render :action => :new
    end

  end

Quando @ thing.save falha, o usuário é apresentado com o mesmo formulário, preenchido previamente com os valores que ele acabou de inserir, juntamente com um flash do que deu errado. Até aí tudo bem, exceto que agora a URL mudou de / things / new para things /, que seria de esperar renderizar a exibição do índice.

Além disso, se o usuário atualizar a página, ele estará olhando para a exibição de índice. Se ele clicar novamente, ele será solicitado a reenviar o formulário, que eu sempre tentei evitar. Se eu redirecionar para (new_thing_path), o envio anterior do usuário será perdido, assim como as mensagens de erro.

Percebo que RESTfully, esse método pode estar "correto", pois a criação de um objeto de coisa deve ser o resultado de POSTing para / things, mas, na interface do usuário, não me importo particularmente com isso.

Eu poderia "manualmente" salvar o objeto @thing inválido na sessão do usuário, para ser exibido depois que eu o redirecionar de volta para new_thing_path, mas isso parece um hack. Parece que deveria haver uma "maneira trilhos" de fazer exatamente isso.

Idéias?

questionAnswers(2)

yourAnswerToTheQuestion