2011-01-22 4 views
30

私のアカウントコントローラでは、変更を保存してフラッシュ通知を表示した後で編集ビューを表示(レンダリング、redirect_to?)したいと思います。rails3で編集ビューとフラッシュメッセージをレンダリングする方法

flash[:notice] = "message" 

ちょうどそれを表示するために、あなたのビューの上部に次の行を追加します:

<p id="notice"><%= flash[:notice] %></p>

そして、あなたあなたはまだRailsの2のように通知を使用することができます

def update 
    @account = Account.find(params[:id]) 

    respond_to do |format| 
     if @account.update_attributes(params[:account]) 
     format.html { redirect_to(@account, :notice => 'Account was successfully updated.') } 

     else 
     format.html { render :action => "edit" } 
     end 
    end 
    end 

答えて

11

ユーザーに編集フォームをもう一度入力させたくない場合は、renderメソッドを使用する必要があります。

+0

をお読みください。更新後に 'redirect_to'するのは標準的なので、ブラウザのRefreshは2回目には送信しません。 「もう一度フォームを編集してください」という部分が私を混乱させます。 – timkay

+0

実際、それは私の間違いでした。あなたのケースでは、実際にはそれらの方法に違いはありません。だから何でも好きなものを使いましょう。 –

+0

@timkayしかし、 'render'と' redirect_to'は完全に別のメソッドであることを忘れないでください。詳細は、[Rails Guides on Rendering](http://guides.rubyonrails.org/layouts_and_rendering.html)を参照してください。 –

43

デフォルトでは、別の文を使用する必要があります。

format.html { 
    flash[:notice] = 'message' 
    render :edit 
} 

This ticketあなたがrender 'edit', :notice => 'message'を使ってみましょうするためのパッチを持っています。それはRailsには入りませんでしたが、それを追加する宝石flash_renderがあります。

+1

'redirect_to'とは対照的に' render'を使っているのであれば、通常は 'flash.now'を使いたいと思っています。なぜ[このブログの記事](http://ryanlue.com/posts/2017-08-24-rails-render#implications-for-flash)で詳しく説明しますか? –

9

ちょうどflash[:notice]を使用しても、その値は次のリクエストで引き続き使用できます。意味は、次の2ページにテキストが表示されます。代わりにflash.nowを使用して、現在の要求で値を使用可能にするだけです。参考のため

format.html { 
    flash.now[:notice] = 'message' 
    render :edit 
} 

私はあなたの最後のコメントを理解していないAction Controller Overview 5.2.1

関連する問題