Ruby on rails 3 在rails 3.2中预编译控制器资产

Ruby on rails 3 在rails 3.2中预编译控制器资产,ruby-on-rails-3,asset-pipeline,rake-task,Ruby On Rails 3,Asset Pipeline,Rake Task,我为每个控制器都有一个单独的scss文件,我不会将它们全部导入application.css文件,这样我就可以在布局中包含特定于控制器的样式表和js文件 因此,在布局中,我会: <%= stylesheet_link_tag "application" %> <%= stylesheet_link_tag params[:controller], :media => "all" %> <%= javascript_include_tag 'applicatio

我为每个控制器都有一个单独的scss文件,我不会将它们全部导入application.css文件,这样我就可以在布局中包含特定于控制器的样式表和js文件

因此,在布局中,我会:

<%= stylesheet_link_tag "application" %>
<%= stylesheet_link_tag params[:controller], :media => "all" %>
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag params[:controller] %>
我需要如何使用舱单才能做到这一点?找不到使用scss本身导入整个目录的方法

  • 对于不同控制器中的相同选择器,我有一些不同的操作。区分这些操作并定义应在特定页面上处理的操作的最简单方法是什么

  • 这是一个坏主意,因为它会为每个页面加载添加额外的HTTP请求,需要大量额外的文件(大部分文件都是空的,很少会有实际的特定于控制器的CSS/JS),并忽略浏览器缓存(缓存application.CSS/JS一次,然后忘记它)

    最好以这样一种方式编写CSS/JS,即您可以将其全部包含在一起,并正确使用资产管道。

    解决方案:

    到config/application.rb文件

    添加此行:

    config.assets.precompile += ["controller1.js", "controller1.css", "controller2.js", "controller3.js"]
    

    下次运行assets:precompile时,它也会编译这些文件,比如:

    config.assets.precompile += Dir::entries("app/assets/javascripts").
                                   map{|f| f[/^(?!application\.).*\.js/]}.compact
    

    用这个问题更新了这个问题。我更喜欢应用程序CSS和JS,然后是每个控制器的CSS和JS。因为控制器正在将我的应用程序拆分为特定的部分。我不喜欢将我所有的JS和CSS都转储到一个文件中。这是可以做到的,但是为什么要使用所有未使用的选择器和空的jquery选择器呢?我正在寻找一种自动实现这一点的方法,但找不到一种干净的方法。
    config.assets.precompile += Dir::entries("app/assets/javascripts").
                                   map{|f| f[/^(?!application\.).*\.js/]}.compact