Railsのクラス定数にからむ罠にハマる
今日の失敗。
こんなmodelがあって
class Article < ActiveRecord::Base
TITLE = "xxのブログ"
def self.title
TITLE
end
.....
end
こんなhelperがあったとき
module ArticleHelper
def title_link(str)
name = Article.title
name << str
link_to h(name), article_path(....)
end
end
viewでtitle_linkヘルパーが呼び出されるたびにリンク名がおかしなことになった。
1回目
<a href="..">xxのブログ aa</a>
2回目
<a href="..">xxのブログ aa bb</a>
3回目
<a href="..">xxのブログ aa bb cc</a>
Rubyは、破壊メソッドでなら定数でも警告なしに上書きできるんだけど、これによってArticle::TITLEがヘルパーを呼ぶたびに上書きされていた。
この部分。
name << str
development環境では毎回ロードされるのでこのバグに気づかなくて、production環境でヒドいことになったのでした。