8

次のようなものがあるとします。

def new
  @user = User.new
end
def create
  @user = User.create(params[:user])
  if @user.save
    flash[:notice] = 'User created'
    redirect_to :action => 'list'
  else
    flash[:error] = 'Some error here!'
    render 'new'
  end
end

コードはわかりやすいと思います。
ここでの問題は、@userオブジェクトが正常に保存されない場合、(上記のように) レンダリングするか new、リダイレクトする必要があるかということです。new

ユーザーによるデータ入力へのリダイレクトnewが失われるかどうかはわかっていますが、レンダリングするnewと、URL は/users/create代わりになります/users/new(これは見苦しいです!)。

4

1 に答える 1

2

使わない方が正解ですredirect。リダイレクトは、まったく新しいリソースをロードしています。

renderただし、セッション データを最新の状態に保ち、フォームの設定方法に応じて、入力されたデータを再入力する必要があります。

あなたは言及します:

ユーザーが入力したデータが new にリダイレクトされるかどうかはわかっていますが、new をレンダリングすると、URL は /users/new ではなく /users/create になります (これは見苦しいです!)。

いいえ、そうではありません。と言うと作成render 'new'していないURLに行きusers/newます。Create as action はPOSTコントローラーへのリクエストのみを処理し、通常はビューが関連付けられることはありません。代わりに、newアクションを参照して、エラーとフォームの表示を処理します。

作成アクションは、リクエストupdateのみを処理することで同じことを行うアクションと共通していますが、ビューの表示を処理するアクションをPUT指します。edit

于 2012-07-30T09:29:54.110 に答える