图像资源可用于CSS文件而不是JS文件 - 为什么?

时间:2015-11-12 16:23:19

标签: javascript css ruby-on-rails

我正在尝试通过js文件访问资产管道中的图像,但是我收到404错误,表示图像不存在。我的理解是Rails指纹和预编译/将图像/资源预加载到浏览器上,因此文件路径'imageName.png'变成了'imageName-uniqueFingerprint.png'的效果,从而使原始路径不再有效。 (如果我误解,请纠正我)

我不明白为什么我可以在CSS文件中使用原始路径,例如:background: url('nebula_small.png')并且图像被检索得很好,但是如果我尝试在JS文件中使用相同的路径我得到404.我认为资产目录中的所有内容都是由Rails预编译的,因此我假设可以平等访问相应的资产。

我可以编写一个辅助方法(每this StackOverflow suggestion)将digest_path与原始路径相关联,但是我想知道是否有一些方法可以简单地给JS文件提供与CSS文件具有的相同的访问权限

对Rails来说还是新手,所以如果你需要澄清,或者我的措辞很差,我很抱歉。谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

我想在.erb文件中添加.js扩展名的最简单方法,并使用asset_path rails helper:

$('#logo').attr({ src: "<%= asset_path('logo.png') %>" });

第二种方法,有点复杂,就是解析你的.sprockets-manifest-md5hash.json文件,该文件被编译到你的公共文件夹,其中包含你图像的所有网址。你可以在这里阅读更多相关信息:

here's the repo

http://edgeguides.rubyonrails.org/asset_pipeline.html#precompiling-assets