Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:为什么我的Rails basic应用程序中不显示图像_Ruby On Rails_Ruby_Ruby On Rails 3_Image - Fatal编程技术网

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" %>