謎エラー:アクション名にstatusを使ったら動きがわけわからなかった

多分、RubyRails予約語をつかってしまったのだと思う。

現象

books_controller.rb にて showとstatusという以下のようなアクションがあったとする。

def show
 何かの処理

 if hogehogeFlg
   flash[:notice] = "エラー"
   redirect_to(:action => 'index', :id => params[:id])
   return
 else
   render
   return 
 end
end

def status
  何かの処理

 if fugafugaFlg
   flash[:notice] = "エラー2"
   redirect_to(:action => 'index', :id => params[:id])
   return
  else
   render
   return
  end
end

hogehogeFlgやfugafugaFlg がfalseのときは問題なく動作していたのだけど、両方がtrueになるとき DoubleRenderError が出てしまう。不思議なのは、showを呼び出したときにもstatusを原因としてDoubleRenderErrorが出てしまうこと。

条件分岐させると DoubleRenderError が出やすいというのは昔経験済みなのでredirect_toの後にはreturnを置いてみたけどまったく解決しない。railsのバージョンの問題かと思って 3.0.5 から 3.0.7に変えたけどだめ。

そして、statusのアクション名を whoに変えてみると問題なく動くことがわかった。だれかの役にたつかもしれないのでメモしておく。3時間ぐらい時間を無駄にしてしまった。