我使用 Rails 3.2.9 和 twitter-bootstrap-rails gem 构建了一个网站。
我知道Rails Asset Pipeline将所有CSS合并到一个文件中。但是,我想知道修改此行为有多容易(不确定这是否是一个好主意)。
假设我有一个具有两个操作的Site
控制器:home
和 contact_us
,并且有以下 CSS:
-
site.css.scss
- 应在控制器的每个操作中加载Site
-
home.css.scss
- 应仅在控制器home
操作Site
加载 -
contact_us.css.scss
- 应仅在控制器contact_us
操作Site
加载
您将如何实现这一目标?
认为将其拆分为不同的页面加载是一个好主意。在生产模式下,所有内容都集中在一个文件中,因此所有CSS只需要加载一次。因此,每个后续页面加载都不会再次加载它。这不仅仅是关于大小,而是关于您的网络服务器的连接和请求的数量。越少越好。
但是,如果您确实愿意,可以在模板的 head 部分使用条件标记。
stylesheet_link_tag 'home' if controller.action_name == 'home'
stylesheet_link_tag 'contact_us' if controller.action_name == 'contact_us'
您还可以使用controller.controller_name
获取控制器名称
我知道Rails Asset Pipeline将所有CSS合并到一个文件中。但是,我想知道修改此行为有多容易(不确定这是否是一个好主意)。
我认为这不是一个好主意,因为您将失去仅获取一次CSS文件的好处。我不确定这是您所追求的目标,但您不会节省任何服务器资源,为特定文件创建额外的请求有点昂贵。
无论如何,你可以通过不需要 application.css.scss 中的文件树(或创建一个特定的文件夹)然后手动调用 stylesheet_link_tag 来做到这一点(您可能应该将其与content_for帮助程序结合使用,以便您可以说出您想要出现的确切位置,请参阅 使用 content_for 方法)