redirect_toの時はflashでrenderの時はflash.now・・だと??
Railsにはflashという便利な仕組みがあって、redirect_toの先でエラーメッセージを出すのがとても簡単に書ける。便利!
しかし、うっかりそのままrenderしちゃうこともあって、そうするとメッセージが2回表示されるという現象が発生してしまうので、そんなときのために、flash.nowという仕組みも用意されている。
[Rails] flash.now[:notice]とflash[:notice]の違い - 拝啓、シーシュポス
なるほど、よく考えられているなあ、さすがRails.
ちょっとまったー!
僕はnoticeを出したいだけなんですよ。それも1度です。0でも2でもなく1度。そんなん、あたりまえじゃないですか。
なんで、ただ1回noticeを出したいだけの僕が、そのあとrenderになるかredirect_toになるかなんて気にしなきゃいけないんだ?
というわけで、以下のようにした。
ApplicationController に追加
def notice_push(msg)
(session[:notice] ||= []).push msg
end
ApplicationHelper に追加
def notice_pop_all
ret = session[:notice]
session[:notice] = nil
ret || []
end
以上!
使い方?説明しなくてもわかるよね!