おおいしつかさ


旅行とバイクとドライブと料理と宇宙が好き。
Ubie Discoveryのプログラマ。
Share:  このエントリーをはてなブックマークに追加

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環境でヒドいことになったのでした。