Rails 应用上 Ruby 的动态页面中未加载图像
Image not loading in dynamic page of Ruby on Rails app
我已经为我的 rails 项目完成了资产管道,一切正常,除了动态帖子页面,例如 http://localhost:3000/posts/2,其中图像未加载。在其他任何地方都可以正常工作。
在控制台中我得到这个错误:
ActionController::RoutingError (No route matches [GET]
"/posts/assets/logo.png")
但是我在图像标签中使用了 src="assets/m1.jpg
但在控制台错误中 link 是不同的!
我错过了什么?
不以 /
开头的链接在您当前所在的 "folder" 中查找。因此,当您在 localhost:3000/posts/2
时,您在 posts
'folder' 所以它寻找 localhost:3000/posts/assets/m1.jpg
.
如果您以 /
开始 link,它将从当前站点 localhost:3000
的顶部开始查找,因此 /assets/m1.jpg
将查找 localhost:3000/assets/m1.jpg
这是你希望它看起来的地方。
在您的代码中,您可以使用 image_tag 助手而不是手动写出您的图像标签:
image_tag('m1.jpg') # <img alt="M1" src="/assets/m1.jpg" />
您应该使用助手 <%= image_tag('m1.jpg') %>
并将图像放在 assets/images/
目录中。
助手将生成图像的正确路径
如果图片标签指定了以下确切的图片路径:
<img src="assets/m1.jpg" etc="etc">
...然后浏览器会将其视为 relative URL 并尝试查找 relative 以当前页的URL,即http://localhost:3000/posts/2
.
因此,浏览器将查找带有此 URL 的图像:http://localhost:3000/posts/assets/m1.jpg
,这正是您的情况。
尝试使用 image_tag
助手:
<%= image_tag "m1.jpg" %>
我已经为我的 rails 项目完成了资产管道,一切正常,除了动态帖子页面,例如 http://localhost:3000/posts/2,其中图像未加载。在其他任何地方都可以正常工作。
在控制台中我得到这个错误:
ActionController::RoutingError (No route matches [GET] "/posts/assets/logo.png")
但是我在图像标签中使用了 src="assets/m1.jpg
但在控制台错误中 link 是不同的!
我错过了什么?
不以 /
开头的链接在您当前所在的 "folder" 中查找。因此,当您在 localhost:3000/posts/2
时,您在 posts
'folder' 所以它寻找 localhost:3000/posts/assets/m1.jpg
.
如果您以 /
开始 link,它将从当前站点 localhost:3000
的顶部开始查找,因此 /assets/m1.jpg
将查找 localhost:3000/assets/m1.jpg
这是你希望它看起来的地方。
在您的代码中,您可以使用 image_tag 助手而不是手动写出您的图像标签:
image_tag('m1.jpg') # <img alt="M1" src="/assets/m1.jpg" />
您应该使用助手 <%= image_tag('m1.jpg') %>
并将图像放在 assets/images/
目录中。
助手将生成图像的正确路径
如果图片标签指定了以下确切的图片路径:
<img src="assets/m1.jpg" etc="etc">
...然后浏览器会将其视为 relative URL 并尝试查找 relative 以当前页的URL,即http://localhost:3000/posts/2
.
因此,浏览器将查找带有此 URL 的图像:http://localhost:3000/posts/assets/m1.jpg
,这正是您的情况。
尝试使用 image_tag
助手:
<%= image_tag "m1.jpg" %>