我有一个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. 对CSS使用ERB,并让Rails计算出图像URL.

1号当然是一种可能性,尽管这意味着我不会在我的图像上 destruct 缓存.第二个是因为我使用的是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'

assets资源 类型可以是以下类型之一:图像、字体、视频、音频、javascript、样式表

Ruby-on-rails相关问答推荐

带有rails 7.1的Lightbox2未初始化

Rails TurboStream:可以向元素动态添加一个css类吗?

Gemfile需要较新版本的依赖项

如何判断字符串中是否包含列值

为什么没有生成命名空间路由?

Rails 7,返回具有两个单独条件的活动记录关联,一个在父级,一个在子级

从 rails 5 升级到 6 和 zeitwerk

Rails 控制台 - 更新 Gem 后的弃用通知

Factory Girl + Mongoid 在fixture 中嵌入文档

在 Ruby on Rails 中获取空临时目录的最佳方法是什么?

渲染:动作和渲染:模板之间的区别

在 Controller 中调用模型方法

通过重定向使闪存哈希保持不变

如何在 Ruby 中生成随机日期?

如何在 Ruby on Rails 的内存缓存存储中列出键?

加载常量时自动加载常量时检测到循环依赖

非持久 ActiveRecord 模型属性

是否可以设置 travis 来运行多种语言的测试?

您将如何解析 Ruby 中的 url 以获取主域?

没有UTC的Rails 3默认日期时间格式