Railsを非常に優れたものにする重要な機能を失うため、アセットパイプラインの外でJSまたはCSSファイルをロードしないでください。そして、あなたは別の宝石を必要としません。私はできるだけ少ない宝石を使用することを信じており、ここでは宝石を使用する必要はありません。
必要なものは「コントローラ固有のJavascript」として知られています(「アクション固有のJavascriptは下部に含まれています」。これにより、特定のコントローラ用の特定のJavaScriptファイルをロードできます。Javascriptをビューに接続しようとすることは一種です。 。逆方向であり、MVC設計パターンに従っていない。それをコントローラーまたはコントローラー内のアクションに関連付けたい場合。
残念ながら、何らかの理由で、Rails開発者はデフォルトで、すべてのページがアセットディレクトリにあるすべてのJSファイルをロードすることにしました。彼らがデフォルトで「コントローラー固有のJavaScript」を有効にする代わりにこれを行うことに決めた理由は、私には決してわかりません。これは、デフォルトで次のコード行を含むapplication.jsファイルを介して行われます。
//= require_tree .
これはディレクティブと呼ばれます。これは、sprocketsがassets / javascriptsディレクトリにあるすべてのJSファイルをロードするために使用するものです。デフォルトでは、sprocketsはapplication.jsとapplication.cssを自動的にロードし、require_treeディレクティブはそれぞれのディレクトリにあるすべてのJSとCoffeeファイルをロードします。
注:足場を作成するとき(足場を作成していない場合は、今から始めるのがよいでしょう)、Rails は、その足場のコントローラー用のコーヒーファイルを自動的に生成します。コーヒーファイルではなく標準のJSファイルを生成する場合は、Gemfileでデフォルトで有効になっているコーヒーgemを削除すると、代わりにスキャフォールドがJSファイルを作成します。
「コントローラ固有のJavaScript」を有効にする最初のステップは、application.jsファイルからrequire_treeコードを削除することです。それでもグローバルJSファイルが必要な場合は、assets / javascriptsディレクトリ内のフォルダに変更してください。IE:
//= require_tree ./global
ステップ2: config / initializers / assets.rbファイルに移動し、以下を追加します。
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
必要なコントローラ名を挿入します。
ステップ3: application.html.erbファイルのjavascript_include_tagをこれで置き換えます(params [:controller]の部分に注意してください:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
サーバーとビオラを再起動してください!足場で生成されたJSファイルは、そのコントローラーが呼び出されたときにのみロードされます。
コントローラの特定のACTIONに特定のJSファイルをロードする必要があります。IE / articles / new?代わりにこれを行ってください:
application.html.erb:
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config / initializers / assets.rb:
config.assets.precompile += %w(*/*)
次に、assets / javascriptsフォルダーにコントローラーと同じ名前の新しいフォルダーを追加し、内部にアクションと同じ名前のjsファイルを置きます。次に、その特定のアクションでロードします。