Rails 3 (正確には .1) は、アセットのパイプラインを提供してくれました。アセット パイプラインは、ご覧のように application.js と application.css を使用します。
アセット パイプラインが行うことは、さまざまな JavaScript ファイルをすべて取り出して、1 つの大きなファイル (通常は application.js) にパッケージ化することです。
ここでの考え方は、あなたが言ったように、コントローラーごとに1つのファイルをJavaScriptで書くことができ、アセットパイプラインは後ですべてをまとめて1つの大きなファイルとして提供するということです。これはパフォーマンスと開発者にとって良いことです。(含まれるファイルが小さいほど、推論と保守が容易になります)。
アセット パイプラインには、いくつかの規則も追加されています。javascript はapp/assets/javascripts
(および他のいくつかの定義済みの場所にもあると思います)、通常はコントローラーごとに 1 つのファイルです (ただし、複数のファイルを持つこともできます!)。 Javascript を出力します。( Coffeescriptはそのような言語の例です。Coffeescript は Javascript ではありませんが、Coffeescript コンパイラは Javascript を出力します)。
アセット パイプラインは、Rails アプリに構造をもたらします。通常、私がプロジェクトに参加している場合、3 つの場所のいずれかに JavaScript を配置します。app/assets/javascript
自分のアプリ コードlib/assets/javascript
用、さまざまなプロジェクトで共有する可能性のある一般的なユーティリティvendor/assets/javascript
用、オープン ソース コミュニティの jQuery や Javascript ライブラリなど用です。それは私のものではありません。
以前、Rails 2 では、すべての Javascript が にありましたpublic/javascripts/
。そして、私はすべてを意味します: 独自のロジックを含む可能性のある JavaScript ファイル、巨大になる可能性がある (そして開発者が推論するのが難しい) ファイル。新しい jQuery コールバックが必要になるたびに、public/javascripts/application.js
. いつか抽出したい Javascript と混合されたベンダー コードと混合されたユーティリティ モジュールを持つことができます。DHH の言葉を借りれば、それはガラクタの引き出しでした。
アセット パイプラインは、クライアント エンドでのダウンロードが高速になるように、場所、コントローラーごとに 1 つのファイル、Javascript のパッケージ化/最適化の規則を提供します。
要約すると、Rails scaffolding コマンドはapp/assets/javascripts/your_controller.js.coffee
. このファイルでは、そのコントローラーによって提供されるビューに関連する Javascript を追加する必要があります。これはベスト プラクティスであり、良いアイデアです。
すべての Javascript コードは、最終的にコンピューターによって 1 つの大きなファイルにコンパイルされ、この抽象化が漏れることがあることに注意してください。(たとえば、2 つの異なる JavaScript ファイルが、2 つの異なるイベントを同じ Javascript ID にバインドするのはまったく偶然です)。これらの漏れやすい抽象化が、資産パイプラインに多くの鋭いエッジがあり、SO に関する多くの資産パイプラインの質問がある理由です。