我试图通过 js 文件访问 Assets 管道中的图像,但是我收到 404 错误,指出该图像不存在。我的理解是 Rails 指纹和预编译/预加载图像/ Assets 到浏览器,因此文件路径“imageName.png”变成了“imageName-uniqueFingerprint.png”的效果,从而使原始路径不再有效。 (有误请指正)
我不明白的是为什么我可以在 CSS 文件中使用原始路径,例如:background: url('nebula_small.png')
并且可以很好地检索图像,但是如果我尝试在 JS 文件中使用相同的路径,我会得到 404。我认为 Assets 目录中的所有内容都是由 Rails 预编译的,因此我假设对各个 Assets 具有相同的访问权限。
我可以编写一个辅助方法(根据 this StackOverflow suggestion) 将 digest_path 与原始路径相关联,但是我想知道是否有某种方法可以简单地为 JS 文件提供与 CSS 文件具有的图像相同的访问权限。
对于 Rails 还是新手,所以如果您需要说明或者我措辞不当,我深表歉意。感谢您的宝贵时间。
最佳答案
我想最简单的方法是将 .erb
扩展名添加到您的 .js
文件,并使用 asset_path
rails helper:
$('#logo').attr({ src: "<%= asset_path('logo.png') %>" });
第二种方法有点复杂,是解析您的 .sprockets-manifest-md5hash.json
文件,该文件被编译到您的公共(public)文件夹中,其中包含所有 url到你的图像。您可以在这里阅读更多相关信息:
http://edgeguides.rubyonrails.org/asset_pipeline.html#precompiling-assets
https://github.com/rails/sprockets/blob/master/UPGRADING.md#publicassetsmanifest-abc123json-location
关于javascript - 图片资源可用于 CSS 文件而不是 JS 文件——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676312/