17

我的index.html.erb代码 -

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

并且图像在app\assets\images..但静止图像没有出现在前端。

当我Firebug这样做时,我相信图像标签正在正确形成......让我知道我在这部分中缺少什么。

<img src="/images/product1.jpg" class="list_image" alt="Product1">

截图-

截屏

图像也到位 -

图片占位符

让我知道我做错了什么以及如何解决它。

编辑

github.com/swapnesh/depot

让我知道为什么它在我的情况下不起作用。

尽管更改/images/product1.jpg To /assets/product1.jpg使其工作。

4

4 回答 4

31

如果您使用资产管道http://guides.rubyonrails.org/asset_pipeline.html

图片路径应该/assets/product1.jpg/images/product1.jpg

如果您不使用资产管道,请将图像文件夹移动到public/images

于 2013-04-05T07:05:07.060 回答
13

我刚刚检查了您的应用程序,您的代码没有任何问题。唯一的事情就是了解image_tag是如何工作的。

通常你把你所有的图片、javscripts 和 stylesheests 放在app/assets目录中。当您在开发环境中工作时,这些文件是未压缩的,但是当您部署到生产环境时,资产会被预编译、缩小,并且结果文件存储在public/assets中。

缩小资产背后的想法只是为了让客户端的请求更快,并节省带宽。

现在,在image_tag方法上,您可以使用图像的外部路径、图像的本地路径或图像的相对路径。

当你这样做

<%= image_tag "http://www.mywebsite.com/image.jpg" %>

它将使用图像标签的绝对网址,您将以

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

这将与最后一个场景相同。

尽管如此,在您的应用程序中,您将让用户上传他们自己的图像,这将在您稍后在书上进行时发生,在现实世界的应用程序中,您将使用诸如回形针载波波之类的宝石

于 2013-04-05T09:03:19.553 回答
1

正如 Srikanth 已经说过的,应该引用资产路径。例如,您可以<%= image_tag 'rails.png' %>在代码中放入并检查 firebug(或检查 chrome 中的元素)以检查结果。

我不太确定您的代码为什么不起作用,因为我可以看到您使用 Rails 进行敏捷 Web 开发。我让仓库应用程序运行没有问题。在您的表格中,我看到您是“Product1”、“Product2”和“Product3”,这是您在 image_url text_field 中实际填写的内容吗?如果将“Product1”更改为“product1.jpg”会怎样?

附带说明一下,如果您想使用 Paperclip,您的调用应如下所示:

<%= image_tag(product.image.url, class: 'list_image') %>
于 2013-04-05T07:34:50.317 回答
1

如果您收到带有 .jpeg 扩展名的文件,请尝试仅使用“.jpg”重命名该文件。

<%= image_tag "image.jpeg" %>

到:

<%= image_tag "image.jpg" %>
于 2018-11-13T01:40:11.660 回答