きたくち

はい。

Rails3.1でJavaScriptが使えなくて困った

年末なので最後に1つだけ自分用にまとめな記事を。
例のごとく他人様のエントリの引用というかまとめ直しというかな内容です。

以前Rails3.1でつくったアプリがherokuだとエラーを吐いて動かないというエントリに書いたとおり、Rails3.1のassetsまわりの変化に苦しめられてました。
このエントリを書いたときはassetsはCSSしか使ってなかったのですが、その後JavaScriptも使ってみたらこれがまたハマったハマった。

最初は assets/javascripts 以下にhogehoge.jsみたいな適当なjsファイルを置いて、application.html.erbで

<%= javascript_include_tag "hogehoge" %>

とかやってみましたが、なぜか呼び出されてる気配がない。

で、よくよく調べてみると以下のようなエントリがヒット。
edge rails(Rails 3.1)の新機能を調べてみる

ふむふむ!

というわけでどうやらsprocketsという複数のjsファイル、cssファイルを統合してくれるプラグインが関係しているらしい。
そこで、application.jsに

//= require jquery
//= require hogehoge
//= require_tree .

と書いて、application.html.erbのほうで

<%= javascript_include_tag "application" %>

とapplication.jsだけを読み込むと、できた!hogehoge.jsが読み込まれた!
requireで指定したjsファイルは app/assets/javascripts と vendor/assets/javascripts の中から勝手に探してくれるらしいですね。そしてrequire_treeはrequireの対象ディレクトリを明示的に指定できると!

というわけでこれで無事JavaScriptも使えるようになって、Rails3.1さんとより一層仲良くなれました。
めでたし。

あ、もちろんプリコンパイルは必要です。

そういえば、このエントリを書くためにちょこっと調べてたら、どうやらRails3.2が出始めてRails4の話まですでにあるらしいですね。でもRails2→3のときのような大きな変更は無いらしいので一安心。