0

2 つのリソースTeamPlayer. Player は my の Team の下にネストされたリソースroutes.rbです。

チームの場合、テンプレートを使用したshowアクションがあります。show.html.erbそのテンプレートには のようなものがform_for [@team, @team.players.build]あるので、基本的にはチーム ビューから新しいプレーヤーを作成できます。

Player#createon errorのコントローラーでレンダリング/リダイレクトをコーディングする最良の方法は何ですか? new標準の作成アクションでは、アクションをエラーでレンダリングします。

  if @player.save
    redirect_to @player, notice: 'Player was successfully created.'
  else
    render action: 'new'
  end

しかし今、私は別のコントローラー ( Player#create) にいますが、フォームは にありTeam#showます。エラーが発生した場合、成功した場合と同様に @team にリダイレクトすると、インスタンス変数に格納されているエラー情報が失われます。試してレンダリングしたほうがいいteam/show.html.erbですか?これはちょっと面倒に見えます。それとも、Player の create アクションを Team コントローラーに追加するのでしょうか?

4

1 に答える 1

1

3 つのオプションが表示されます。

  1. flashエラー メッセージの処理に使用します。インスタンス変数は使用できませんが、レンダリングしたものは何でもflash[:error]Team#show で使用できます。

  2. json 応答でリモート要求を使用します。リダイレクトする必要はまったくありません。新しいプレーヤーのパーシャル (成功の場合) またはエラー メッセージ (エラーの場合) を含む json オブジェクトを返すだけです。リモート コールバックで応答を処理して、それに応じてページを更新します。

  3. プレイヤー作成ロジックをチーム コントローラーに移動します。これは、他のオプションが実行できない場合にのみ行います。

于 2012-11-20T16:01:25.837 に答える