Ruby on rails Rails3资产管道:特定于控制器的样式表

Ruby on rails Rails3资产管道:特定于控制器的样式表,ruby-on-rails,asset-pipeline,Ruby On Rails,Asset Pipeline,关于资产管道主题,Rails指南建议Rails只需调用以下命令即可链接到特定于控制器的CSS文件: stylesheet_link_tag params[:controller] 摘自Rails指南: 例如,如果生成一个ProjectsController,Rails还会在app/assets/javascripts/projects.js.coffee和app/assets/stylesheets/projects.css.scss中添加一个新文件。您应该将控制器特有的任何JavaScri

关于资产管道主题,Rails指南建议Rails只需调用以下命令即可链接到特定于控制器的CSS文件:

stylesheet_link_tag params[:controller] 
摘自Rails指南:

例如,如果生成一个ProjectsController,Rails还会在app/assets/javascripts/projects.js.coffee和app/assets/stylesheets/projects.css.scss中添加一个新文件。您应该将控制器特有的任何JavaScript或CSS放在它们各自的资产文件中,因为这些文件可以仅为这些控制器加载,并带有诸如或之类的行。

在开发中,我们允许Rails回到资产管道上,这样做很好。然而,在生产中,我得到一个错误,说样式表没有预编译

从我所读到的内容来看,您必须向预编译数组中添加任何希望显示为独立文件的资产,如下所示:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js']

如果我想要按照上面的Rails指南示例链接特定于控制器的样式表,我是否必须枚举预编译数组中的每个样式表?

简单的答案是。。。对

但是,请记住,资产管道也可以用于匹配选择器。我为一个简单的cms实现了类似的设置,我知道我希望每个控制器都有自己的.css和.js。配置看起来像

config.assets.precompile += ["*.css", "*.js")
如果您分配了与控制器没有直接关系的样式表或脚本,那么这不是最好的解决方案。在我的例子中,每个控制器都需要非常不同的.js文件

此外,如果您的不同资产可以分为两个或三个相互关联的组,您可以考虑创建多个清单,然后显式列出它们。 编辑 我想为任何试图决定如何设置资产预编译的人总结出这个答案

除了显式预编译每个资产或清单外,还可以将所有要预编译的文件放入资产文件夹中的文件夹中,并使用相同的通配符匹配仅编译这些资产

比如说

config.assets.precompile += ['*.css', 'manifests/*.js']
将编译清单文件夹中的所有css表和.js文件

类似地,您可以将assets.precomi传递给正则表达式。所以,如果你想在任何你想预编译的文件中添加“pre_u2;”,你可以使用类似于

config.assets.precompile += [/^pre_\w*.(css|js)/i]
这种可能性是无限的,只是不要觉得你必须满足于预编译所有资产,这可能是一种无用的消耗,因为大多数脚本和css应该被编写为在多个实例中使用,并与其他脚本结合使用,或者将所有东西,甚至是高度专业化的脚本都扔进应用程序中。*