ruby-on-rails - 使用 Rails 3.1 时如何在 Sass 中使用引用图像?

标签 ruby-on-rails css ruby-on-rails-3 sass sprockets

我有一个 Rails 3.1 元素, Assets 管道运行良好。问题是我需要在我的 Sass 中引用图像,但 Rails 会计算图像 URL。 (这在生产中尤为重要,Rails 将图像的 Git 哈希附加到其文件名以破坏缓存。)

例如,在app/assets/stylesheets/todos.css.scss中:

.button.checkable { background-image: url(/assets/tick.png); }

当我部署(或运行 rake assets:precompile)时,文件 app/assets/images/tick.png 被移动到 public/assets/tick-48fe85c0a.png 或类似的东西。这会破坏 CSS。 This post提出两个建议:

  1. 不要对图像使用 Assets 管道——而是将它们放在 public/images/ 中并直接引用它们
  2. 将 ERB 用于您的 CSS,并让 Rails 计算出图像 URL。

第 1 种肯定是有可能的,尽管这意味着我的图像不会出现缓存破坏。第 2 条已出局,因为我使用 Sass 而不是 ERB 来处理文件。

最佳答案

以下应该可以解决问题:

.button.checkable { background-image: url(image_path('tick.png')); }

Rails 实际上提供了一堆助手来引用 Assets :

image-url('asset_name')
audio-path('asset_name')

总的来说

[asset_type]-url('asset_name') #Becomes url('assets/asset_name')
[asset_type]-path('asset_name') #Becomes 'assets/asset_name'

asset_type 可以是以下之一:图像、字体、视频、音频、javascript、样式表

关于ruby-on-rails - 使用 Rails 3.1 时如何在 Sass 中使用引用图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6393315/

相关文章:

ruby-on-rails - Rails,在页面加载时通过 JS 渲染部分内容?

ruby-on-rails - 带有可选参数的 Rails Search?

css - 如何在 Firebug 中查看打印媒体 CSS?

html - 3 svg 图像相互重叠

ruby-on-rails - Rails 测试数据库未正确准备

ruby-on-rails-3 - 我可以让 Ruby on Rails 控制台更好地记住我的命令历史记录吗?

ruby-on-rails - 没有 .json 扩展名的 Jbuilder

ruby-on-rails - 是否有更好的 Ruby 或 Rails 习惯用法来检查嵌套哈希中是否存在值?

html - 在 Grid Bootstrap 中大小相同?

ruby-on-rails - 使用 rails 将引号添加到 json 中的 ID