Railsでテンプレートを .rhtml でなく .html を使えるようにする
諸般の事情から、Railsのテンプレートファイルを .rhtml でなく .html にしたいという要求がわいてきた。
本番システムではなくプロトタイプなので、適当なやり方で対応できるかな? と思ってやってみました。
テンプレートのファイルをリネームしスタックトレースを見ながら、Rails内のそれらしいカ所のソースを眺める。
NetBeans の Goto Declaration 機能が役にたちました。
ActiveControll::Base や ActvieView::Baseが関係するソースですが、いたるところに 'rhtml' や :rhtml が直書きされているので、テンプレートのフルパスを求める full_template_path メソッドに手を入れる事に決定。
Ruby のオープンクラス機能で ActvieView::Base#full_template_path を以下のように再定義したところ出来ました。
module ActionView class Base private alias :full_template_path_origin :full_template_path def full_template_path(template_path, extension) spoof_ext = (extension.to_s == 'rhtml') ? 'html' : extension path = full_template_path_origin(template_path, spoof_ext) #RAILS_DEFAULT_LOGGER.info("full_template_path(#{template_path}, #{extension}) = #{path}") return path end end end
*注意* Railsのバージョン(v1.2.3)に激しく依存している思います。また十分なテストは行ってないので、本番のシステムには使わないで下さい。