0

我使用 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

您将如何实现这一目标?

4

2 回答 2

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

于 2012-12-09T11:05:52.100 回答
0

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

我认为这不是一个好主意,因为您将失去仅获取一次 CSS 文件的好处。我不确定这是您追求的目标,但您不会节省任何服务器资源,为特定文件创建额外请求有点昂贵。

无论如何,您可以通过不需要 application.css.scss 中的文件树(或创建特定文件夹)然后手动调用 stylesheet_link_tag 来做到这一点(您可能应该将它与 content_for 帮助器结合起来,这样您就可以说出您想要的确切位置喜欢出现,请参阅使用 content_for 方法

于 2012-12-09T11:08:14.520 回答