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)に激しく依存している思います。また十分なテストは行ってないので、本番のシステムには使わないで下さい。