Rails4 flashのメッセージが2回表示される
flashに設定したメッセージが2回表示されて困ったのでメモ。
下記のようにflashにalertを設定し、newを再表示していた。
flash[:alert] = "登録に失敗しました。" render action: 'new'
登録画面で登録ボタンを押下すると、正常にメッセージが表示されたが、再度登録画面を表示すると、また同じメッセージが表示されてしまった。もう一度登録画面を表示すると、メッセージは表示されなかった。
正しくは、下記のように記載しなければいけなかったようだ。
flash.now[:alert] = "登録に失敗しました。" render action: 'new'
flash.now
現在のリクエストでのみ有効なメッセージを設定する。
現在のリクエストが終了した時点で、自動的にメッセージは削除される。
renderで表示する画面にメッセージを表示したい場合に用いる。
flash
次のリクエストまで有効なメッセージを設定する。
次のリクエストが終了した時点で、自動的にメッセージは削除される。
redirect_toした先の画面でメッセージを表示したい場合に用いる。
私はrenderでnewを再表示していたのに、flashを使っていたため、期待していた画面の1つ先の画面にまでメッセージが表示されていたようだ。
参考:
[Rails] flash.now[:notice]とflash[:notice]の違い - 拝啓、シーシュポス