我使用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
操作中加载你将如何实现这一目标?
答案 0 :(得分:2)
我不认为将它拆分为不同的页面加载是一个好主意。在生产模式中,所有内容都在一个文件中,因此所有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
答案 1 :(得分:0)
据我所知,Rails Asset Pipeline将所有CSS合并到一个文件中。但是,我想知道修改这种行为是多么容易(不确定这是不是一个好主意)。
我认为这不是一个好主意,因为你只会丢失一次获取CSS文件的好处。我不确定这是你所追求的目标,但你不会保存任何服务器资源,因此创建对特定文件的额外请求是有点贵的。
无论如何,你可以通过不要求application.css.scss中的文件树(或创建一个特定的文件夹),然后手动调用stylesheet_link_tag(你应该将它与content_for helper结合起来,这样你就可以说确切地想要显示,请参阅Using the content_for Method)