为什么rails加载所有css文件,即使页面不需要特定的样式表?

Lor*_*lor 1 ruby-on-rails ruby-on-rails-4

Rails的新手(已使用它3周).我有几个视图及其相应的scss文件.

例如,

查看

view1.html.erb
view2.html.erb
view3.html.erb
Run Code Online (Sandbox Code Playgroud)


样式表

view1.scss
view2.scss
view3.scss
Run Code Online (Sandbox Code Playgroud)

当我加载页面view1.html内部<head>时,所有三个样式表文件都已加载(我实际上现在需要view2.css并且view3.css此时需要).

它背后有原因吗?为什么不加载当前页面需要的静态文件?例如,仅view1.css在页面中加载view1.html.

我知道在生产环境中所有这些都将合并为一个文件.这是因为所有这些静态资产都将被浏览器缓存,因此第一次加载单个文件会使后续访问速度更快吗?

我问这个问题的原因是因为我只想在页面中包含控制器特定的样式表.我试过下面的代码,但是原因non ppreprocess error.

<%= javascript_include_tag params[:controller] %>
<%= stylesheet_link_tag params[:controller] %>
Run Code Online (Sandbox Code Playgroud)

我仍在阅读下面链接的文档,

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

感谢您抽出时间查看问题.

Sra*_*van 6

您可以尝试以这种方式实现这一目标,

如果您生成一个名为Userscontroller的控制器,Rails会在app/assets/javascripts/users.js.coffee另一个处添加新文件app/assets/stylesheets/users.css.scss.您应该将任何JavaScript或CSS唯一的控件放在各自的资产文件中,因为这些文件可以仅为这些控制器加载,例如

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

首先,通过删除application.css清单中的任何额外要求来禁用所有样式表的默认加载.

*= require_tree .

删除此行或更改为,

* require_tree . // removed '='

告诉Rails编译我们的控制器资产

默认情况下,资产管道仅编译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
Run Code Online (Sandbox Code Playgroud)

注意:您也可以将css.scss重命名为css.

请查看此链接了解详情