【问题标题】:How to use SASS as a template handler for views in Rails 3?如何使用 SASS 作为 Rails 3 中视图的模板处理程序?
【发布时间】:2012-01-18 19:18:37
【问题描述】:

我有一种情况,我根据数据库中的信息生成样式表。这意味着我有一个 views/users/show.css.erb 包含如下代码:

a {
  color: <%= @user.favorite_color %>;
}

很公平,与 respond_to { |f| 完美配合f.css } 在我的控制器中。但是现在我想在我的 CSS 中使用一些 SASS 的时髦功能,比如变亮、变暗等,所以我想让 SASS 解析我的视图。但是,如果没有太多丑陋的黑客,我无法弄清楚如何在我的视图中将 SASS 注册为模板处理程序。我只是不明白它是如何工作的。有人试过吗?

我尝试过包含 SASS 的 Functions 模块,但无济于事。

【问题讨论】:

  • 我终于用 'foo.css.erb' 视图修复了它,并且这段代码 response_to do |format| format.css 渲染 :text => Sass::Engine.new(render_to_string, syntax: :scss, cache: false).render end end 缓存通过常规页面缓存处理。
  • 我做了类似 Martijn 的事情——尽管您必须确保包含 sprockets 上下文,以便获得所有资产管道好东西stackoverflow.com/a/35059922/148410

标签: ruby-on-rails sass


【解决方案1】:

前段时间我计划对动态用户主题做同样的事情。那时,我发现了一个 mailing list answer 与你的类似问题,由 Nathan Weizenbaum(SASS 的作者)提出,这让我回到了正轨:

3 月 18 日上午 11:46,Nathan Weizenbaum 写道:

Sass 不允许动态访问 Rails 代码是有原因的 - 请参阅 http://haml.hamptoncatlin.com/docs/rdoc/files/FAQ.html 的 Sass 部分 一个简短的讨论。 Sass 也相当慢,因为它只编译一次, 所以这对于生产环境来说可能太慢了。

该链接不再有效,但 SASS 常见问题解答只有一个名为 Can I use a variable from my controller in my Sass file? 的部分回答了 动态 问题:

如果你真的,真的需要在每个请求上编译 Sass,首先确保你有足够的缓存设置。然后你可以使用 Sass::Engine 来渲染代码,使用 :custom 选项传入可以从你的 Sass 函数访问的数据。

因此,一般来说,SASS 并不是为每个请求的动态 CSS 生成而设计的。相反,它旨在用作生成静态 css 文件的预编译解决方案。

【讨论】:

  • 谢谢,这应该让我继续前进。我意识到 Sass 相对较慢,并且肯定计划缓存输出。我想我会使用 Sass::Engine 来解决这个问题。
猜你喜欢
  • 2011-04-08
  • 1970-01-01
  • 2011-10-14
  • 1970-01-01
  • 2016-11-04
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多