2016-08-19 1 views
0

私のアプリケーションには多くのコントローラーがあり、RailsはコントローラーごとにCSSとjs(コーヒー)ファイルを作成します。Railsはコントローラー固有のものだけでなく、すべてのJSファイルをロードします

Railsはコントローラ固有のJSファイル(http://guides.rubyonrails.org/v3.2.8/asset_pipeline.html#how-to-use-the-asset-pipeline)のみを読み込むことがわかっています。

私はフィードバックコントローラを持っており、javascript_include_tagを使って外部JSライブラリを読み込みます。 feedback.jsで私はこのライブラリを使用しています。素晴らしい作品。

しかし、別のコントローラに移動すると、feedback.jsで使用されている関数が見つからないというJSエラーが表示されます。

フィードバックコントローラにない場合、Railsがfeedback.jsを読み込もうとしているのはなぜですか?

+0

どのバージョンのRailsを使用していますか?あなたは、半古典的なバージョンのRailsガイドをリンクしました。それにもかかわらず、あなたのバージョンには次のものが含まれています: "バージョン3.1から、RailsはデフォルトですべてのJavaScriptファイルを1つのmaster.jsファイルとすべてのCSSファイルを1つのマスター.cssファイルに連結します。実際に各コントローラのJSアセットを分離したい場合は、[関連する質問](http://stackoverflow.com/questions/38753945/rails-css-stylesheets-overriding-each-other/38754089#38754089)を参照してください。 – MarsAtomic

答えて

1

Railsアセットパイプラインは、コントローラごとにコントローラ固有のJSファイルをロードしません。すべてのページにapplication.jsで必要なすべてのJSファイルを読み込みます。新しいリソースを作成するときには、各コントローラのビューに関連するようにJSコードを整理するのに役立つように、リソースの名前付きJSファイルを作成します。しかし、JSコードはデフォルトでapplication.jsを使用するすべてのページに読み込まれます。

コントローラー固有のJSファイルを作成できますが、プリコンパイルセクションのapplication.rbで定義し、application.jsにも含まれていないことを確認する必要があります。

例:

application.rb:

module YourApp 
    class Application < Rails::Application 
    # ... 
     config.assets.precompile += %w(feedback.js) 
    end 
    end 
end 

その後で、あなたの application.jsデフォルトでロードから feedback.jsを維持します //= require feedback、削除する必要があります。最後に、余分なライブラリを使用しているように、手動で feedback.jsを必要とするビューに javascript_include_tagで含める必要があります。

関連する問題