RailsのビューをJavaScript形式でレンダリングする。

<script type="text/javascript" src="/include.js"></script>
↓
document.write('<p>foobar<\/p>');

のようにJavaScriptで外部HTMLをインクルードしたい場合。
document.writeをRailsで出力するメソッド。

  def render_to_js(opts)
    str = render_to_string opts
    str = str.gsub(/[\r\n]/," ")
    str = str.gsub(/\\/,"\\\\")
    str = str.gsub(/'/,"\\\'")
    str = str.gsub(/\s+/," ")
    str = str.gsub(/<\//,"<\\/")

    render :text => "document.write('#{str}');\n"  
  end

をapp/controller/application.rbに追加。renderと同じオプションを指定して、

render_to_js :action => 'include_js', :layout => false

のようにして使う。テンプレートは普通にHTMLを出力するように記述する。



</ → <\/ の変換は、CDATAの終了記号をエスケープするため。外部ファイルとして読み込む前提なら必要ないかもしれない。