Css 如何在rails中正确分离样式文件?

Css 如何在rails中正确分离样式文件?,css,ruby-on-rails,styles,Css,Ruby On Rails,Styles,我目前正在使用rails2和rails3 文档中说,所有页面中的所有样式都被编译成一个文件 例如,一个新的Rails应用程序包含一个默认值 app/assets/javascripts/application.js文件,其中包含 以下几行: // ... //= require jquery //= require jquery_ujs //= require_tree . 我对rails处理这个问题的方式很感兴趣。如何将所有样式写入一个文件中。它是为每一页都这样做,还是在单独的文件中创建样式

我目前正在使用
rails2
rails3

文档中说,所有页面中的所有样式都被编译成一个文件

例如,一个新的Rails应用程序包含一个默认值 app/assets/javascripts/application.js文件,其中包含 以下几行:

// ...
//= require jquery
//= require jquery_ujs
//= require_tree .
我对rails处理这个问题的方式很感兴趣。如何将所有样式写入一个文件中。它是为每一页都这样做,还是在单独的文件中创建样式?rails 2和rails 3在方法上有什么不同?

rails 3(.1)给了我们一个答案。资产管道使用application.js和application.css,如您所见

资产管道所做的是将所有不同的javascript文件打包成一个大文件(通常是application.js)

这里的想法是,您可以像您所说的那样,为每个控制器编写一个javascript文件,然后资产管道将所有内容汇集在一起,并将其作为一个大文件提供。这对性能和开发人员都有好处。(包含的小文件更易于推理和维护)

资产管道还添加了一些约定:javascripts位于
app/assets/javascripts
(我认为还有一些其他定义的地方),每个控制器通常有一个文件(但您可以有多个!),而这个javascript实际上可以由输出javascript的某种语言生成。(这是此类语言的一个例子——Coffeescript不是Javascript,而是Coffeescript编译器输出Javascript)

资产管道将结构引入Rails应用程序。通常情况下,如果我在一个项目中,我会让javascript在三个地方中的一个:对于我自己的应用程序代码,
lib/assets/javascript
对于我可能在不同项目中共享的一些常用工具,还有
vendor/assets/javascript
,比如开源社区中的jQuery或javascript库,它们不是我的

以前,在Rails2中,所有Javascript都生活在
public/javascripts/
中。我指的是一切:可能包含您自己逻辑的javascript文件,可能是巨大的文件(开发人员难以推理),因为每次需要新的jQuery回调时,您都会将其添加到
public/javascripts/application.js
。您可以将实用程序模块与供应商代码混合在一起,这些代码与您希望某天提取的Javascript混合在一起。用DHH的话说,这是一个垃圾抽屉

资产管道为我们提供了位置约定、每个控制器一个文件以及打包/优化Javascript,以便在客户端更快地下载

总之:Rails scaffolding命令生成
app/assets/javascripts/your_controller.js.coffee
。在此文件中,您应该添加与该控制器提供的视图相关的Javascript。这是一个最佳实践,也是一个好主意

值得注意的是,您的所有Javascript代码最终都被计算机编译成一个大文件,有时这种抽象会泄漏。(例如,两个不同的javascript文件完全意外地将两个不同的事件绑定到同一个javascript id)。这些漏洞百出的抽象是为什么资产管道有许多尖锐的边缘,以及许多资产管道问题等等