2016-07-07 8 views
0

Railsの新機能(3週間使用しました)私はいくつかのビューと対応するscssファイルを持っています。例えばページにその特定のスタイルシートが必要ない場合でも、すべてのCSSファイルが読み込まれるのはなぜですか?

ビュー

view1.html.erb 
view2.html.erb 
view3.html.erb 


スタイルシート

view1.scss 
view2.scss 
view3.scss 

私はをロードの中の<head>の3つのスタイルシートファイルがロードされています(現時点では実際にはview2.cssview3.cssが必要です)。

理由はありますか?なぜ現在のページに必要な静的ファイルをロードしないのですか?たとえば、ページview1.htmlにはview1.cssをロードします。

私は実稼働環境で知っていますが、これらはすべて1つのファイルにまとめられます。これは、これらのすべての静的アセットがブラウザによってキャッシュされるため、最初に1つのファイルを読み込んで以降の訪問をはるかに高速化するためですか?

私がこの質問をする理由は、コントローラ固有のスタイルシートのみをページに含めるためです。私は以下のコードを試しましたが、原因はnon ppreprocess errorです。

<%= javascript_include_tag params[:controller] %> 
<%= stylesheet_link_tag params[:controller] %> 

私はまだ、下のリンクからご質問を見るお時間を

http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

感謝のドキュメントを読んでいます。あなたががUserController という名前のコントローラを生成する場合

答えて

4

あなたはこの方法でそれを達成しようとすることができ、

は、Railsのapp/assets/stylesheets/users.css.scssapp/assets/javascripts/users.js.coffeeと別の新しいファイルを追加します。これらのファイルはその後、ちょうどそのような

<%= javascript_include_tag params[:controller] %> or <%= stylesheet_link_tag params[:controller] %>

まずなどのラインでこれらのコントローラにロードすることができるよう あなたは、それぞれのアセットファイル内のコントローラにユニークな任意のJavaScriptやCSSを置く必要があり、すべてのデフォルトのロードを無効application.cssマニフェストの余分な要求を取り除いてスタイルシートを作成します。

*= require_tree .

デフォルトでは、当社のコントローラ資産

をコンパイルするためのRailsに知らせるこの行を削除するか、に変更、

* require_tree . // removed '='

、アセットパイプラインはapplication.js/.css、彼らが必要とするすべてのファイルをコンパイル。 require_treeを削除したためです。私たちは、コントローラ固有の資産についてRailsに伝える必要があります。そうしないと、コンパイルされません。

config/initializers/assets.rbと呼ばれる新しい初期化ファイルを作成し、(あなた自身でコントローラ名を置き換えて)次の行を追加します。

%w(controller_one controller_two controller_three).each do |controller| 
    Rails.application.config.assets.precompile += ["#{controller}.js.coffee", "#{controller}.css.scss"] 
end 

注:また、CSSにcss.scssの名前を変更することができます。

Check this link for details

+0

、以下のコードに@Sravanのソリューションを置き換える、すべてのコントローラは私が悪い感じさせる宣言する。ありがとう。 –

+0

問題はありません。 :) – Sravan

+0

問題が解決した、ありがとう@Sravan。 :D –

0

明示的にので、私たちは私がこの2時間後にしようとします

Rails.application.config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 
Rails.application.config.assets.precompile += ["*.js.es6", "*.scss"] 
関連する問題