Ruby on rails Rails:为什么我的Rails basic应用程序中不显示图像
我的Ruby on rails Rails:为什么我的Rails basic应用程序中不显示图像,ruby-on-rails,ruby,ruby-on-rails-3,image,Ruby On Rails,Ruby,Ruby On Rails 3,Image,我的index.html.erbcode- <h1>Listing products</h1> <table border="1"> <% @products.each do |product| %> <tr> <td><%= product.title %></td> <td><%= product.description %></td>
index.html.erb
code-
<h1>Listing products</h1>
<table border="1">
<% @products.each do |product| %>
<tr>
<td><%= product.title %></td>
<td><%= product.description %></td>
<td><%= image_tag(product.image_url, :class => 'list_image') %></td>
<td><%= product.price %></td>
<td><%= link_to 'Show', product %></td>
<td><%= link_to 'Edit', edit_product_path(product) %></td>
<td><%= link_to 'Destroy', product, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>
<br />
<%= link_to 'New Product', new_product_path %>
屏幕截图-
图像也已就位-
让我知道我做错了什么,以及如何修复它
编辑
让我知道为什么它在我的情况下不起作用
尽管将
/images/product1.jpg
更改为/assets/product1.jpg
使其工作正常。如果您使用的是资产管道
图像路径应该是/assets/product1.jpg
,而不是/images/product1.jpg
如果您没有使用资产管道,请将images文件夹移动到
public/images
,正如Srikanth所说,应该引用资产路径。例如,您可以在代码中放入
,然后检查firebug(或检查chrome中的元素)以检查结果
我不太清楚为什么您的代码不起作用,因为我可以看到您使用Rails进行了敏捷Web开发。我让depot应用程序顺利运行。在您的表中,我看到您是“Product1”、“Product2”和“Product3”,这是您在image\u url text\u字段中实际填写的内容吗?如果将“Product1”更改为“Product1.jpg”,会发生什么情况
另一方面,如果你想使用回形针,你的电话应该如下所示:
<%= image_tag(product.image.url, class: 'list_image') %>
我刚刚检查了你的应用程序,你的代码没有问题。唯一要做的就是了解图像标签的工作原理 通常,您会将所有图像、脚本和样式列表放在app/assets目录中。在开发环境中工作时,这些文件将以未压缩的方式提供,但在部署到生产环境中时,资产将预编译、缩小,结果文件存储在public/assets中 缩小资产背后的想法,只是为了让客户端的请求更快,并节省带宽 现在,在方法image\u标签上,您可以使用图像的外部路径、图像的本地路径或图像的相对路径 当你这样做的时候
<%= image_tag "http://www.mywebsite.com/image.jpg" %>
它将使用图像标记的绝对url,您将以
<img src="http://www.mywebsite.com/image.jpg" />
您还可以添加一个本地路径,如
<%= image_tag "/images/image.jpg" %>
这将以
<img src="/images/image.jpg" />
这实际上是您遇到的问题,因为rails在预编译文件时,会将所有内容放在/public/assets中,您可以按照其他用户解释的路径/assets访问这些文件
那么代码呢
<%= image_tag "/assets/image.jpg" %>
实际上是有效的,因为你以
<img src="/assets/image.jpg" />
您可以做的另一件事是使用相对路径,即
<%= image_tag "image.jpg" %>
将转换为
<img src="/assets/image.jpg" />
这与上一个场景的效果相同
然而,在您的应用程序中,您将允许用户上传他们自己的图像,这将在以后的书籍中发生,在现实世界的应用程序中,如果您收到一个扩展名为.jpeg的文件,您将使用gem-like或,然后尝试用“.jpg”重命名该文件 从
致:
您使用的是回形针还是carrierwave?您是否100%确定文件/app/assets/images/product1.jpg存在?我不确定,但该文件可能不存在,然后帮助程序正在使用路径/images/product1.jpg而不是/assets/product1.jpgTry编辑中的src
属性:
到
firebug@codeit这个案例正如skrikant所提到的……虽然我正在寻找关于这种行为的详细答案,但我只是查看了在代码中,我添加了一个带有图像url“product2.jpg”的产品,然后代码可以很好地使用。如果您在创建产品时输入路径/images/product2.jpg,那么它将使用相对路径,但如果您只输入product2.jpg,它将指向正确的资产路径。尽管如此,这并不是将图像上传到产品的方式,请尝试查看parperclip之类的gems,我建议您阅读《使用rails进行敏捷web开发》一书。默认情况下,图像将在/assets/images/
@Srikanth Perfect]中搜索。当我更改“/images/product1.jpg”-->“/assets/product1.jpg”时,它可以正常工作。请详细说明您的答案,因为我对它不熟悉(虽然我检查了您提到的URL。但如果您能用简单的话回答,我们将不胜感激) +1@Swapnesh:您必须阅读资产管道文档才能理解此行为。从Rails 3.1开始介绍资产管道。它将图像、css、js移动到assets目录中,并使视图文件中的路径更简单。在视图文件中,我们只调用/assets/product.jpg、/assets/product.css,即使它是在/assets/images/product.jpg、/assets/stylesheets/product.css中组织的。这还可以在production.Thx上压缩JS、css和图像,用于编写和时间+1:)这非常复杂。非常感谢。
<img src="/assets/image.jpg" />
<%= image_tag "image.jpeg" %>
<%= image_tag "image.jpg" %>