【问题标题】:How to include action specific CSS or JS in Rails 3.2?如何在 Rails 3.2 中包含特定于动作的 CSS 或 JS?
【发布时间】:2012-12-09 10:48:55
【问题描述】:

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

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

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

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

您将如何实现这一目标?

【问题讨论】:

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


【解决方案1】:

我不认为将其拆分为不同的页面加载是一个好主意。在生产模式下,所有内容都在一个文件中,因此您的所有 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获取控制器名称

【讨论】:

    【解决方案2】:

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

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

    无论如何,您可以通过不需要 application.css.scss 中的文件树(或创建特定文件夹)然后手动调用 stylesheet_link_tag 来做到这一点(您可能应该将它与 content_for 帮助器结合起来,这样您就可以说出在哪里正是你想要出现的,见Using the content_for Method)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 2023-04-06
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多