Archive for January 25th, 2011

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

以上!
使い方?説明しなくてもわかるよね!