如何在Rails 3.2中包含特定于动作的CSS或JS?

时间:2012-12-09 10:48:56

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 asset-pipeline

我使用Rails 3.2.9和twitter-bootstrap-rails gem构建了一个网站。

据我所知,Rails Asset Pipeline将所有CSS合并到一个文件中。但是,我想知道修改这种行为是多么容易(不确定这是不是一个好主意)。

假设我有一个Site控制器,其中有两个操作:homecontact_us,并且有以下CSS:

  • site.css.scss - 应加载在Site控制器的每个操作
  • home.css.scss - 只应在home控制器的Site操作中加载
  • contact_us.css.scss - 只应在contact_us控制器的Site操作中加载

你将如何实现这一目标?

2 个答案:

答案 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