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



我使用 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
  • 加载

您将如何实现这一目标?

我不

认为将其拆分为不同的页面加载是一个好主意。在生产模式下,所有内容都集中在一个文件中,因此所有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 方法)

最新更新