在我的新Rails应用程序中工作/显示的图像

时间:2011-09-27 14:55:56

标签: ruby-on-rails

更新: o.k.这很奇怪,在浏览器中,我可以访问localhost:3000 / assets / images / rails.png中的图像,但是当我将该路径放入seeds.rb文件然后加载页面时,它显示它正在尝试查找/assets/rails.png中的图像,即它正在跳过图像文件夹...任何想法?

是否可以将导轨配置为仅查看两个文件夹?

我正在使用一本名为Agile web Development with Rails的书来学习如何使用该框架,但似乎存在一些细微差别。它为rails 3.0和3.1提供了代码(我正在使用后者)但它并不总是按预期工作。到目前为止,我们已经为Products类创建了scaffolding,并使用seeds.rb将一些数据放入sqlite3数据库中。每个“产品”的assets / images文件夹中都有图像,但它没有显示。 我在seeds.rb文件中试验了图像的路径,但它没有用。

图片位于app / assets / images文件夹

我将向您展示以下文件,所有文件都以某种方式处理图像

1.app/views/products/_form.html.erb 2.app/views/products/index.html.erb 3. db / seeds.rb

更新:在日志文件中,它表示图片存在路由错误。

Started GET "/assets/wd4d.jpg" for 127.0.0.1 at Tue Sep 27 11:01:43 -0400 2011
Served asset /wd4d.jpg - 404 Not Found (3ms)

ActionController::RoutingError (No route matches [GET] "/assets/wd4d.jpg"):


Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.1.0/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.5ms)


Started GET "/images/ruby.jpg" for 127.0.0.1 at Tue Sep 27 11:01:43 -0400 2011

ActionController::RoutingError (No route matches [GET] "/images/ruby.jpg"):

应用/视图/产品/ _form.html.erb

<%= form_for(@product) do |f| %>
  <% if @product.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2>

      <ul>
      <% @product.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description, :rows => 6 %>
  </div>
  <div class="field">
    <%= f.label :image_url %><br />
    <%= f.text_field :image_url %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

2.app/views/products/index.html.erb

<h1>Listing products</h1>

<table>
<% @products.each do |product| %>
  <tr class="<%= cycle('list_line_odd', 'list_line_even') %>">

    <td>
      <%= image_tag(product.image_url, :class => 'list_image') %>
    </td>

    <td class="list_description">
      <dl>
        <dt><%= product.title %></dt>
        <dd><%= truncate(strip_tags(product.description),
               :truncate => 80) %></dd>
      </dl>
    </td>

    <td class="list_actions">
      <%= link_to 'Show', product %><br/>
      <%= link_to 'Edit', edit_product_path(product) %><br/>
      <%= link_to 'Destroy', product, 
                  :confirm => 'Are you sure?',
                  :method => :delete %>
    </td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New product', new_product_path %>
  1. 第3。 db / seeds.rb (请注意我在这里尝试了图片网址)

    Product.delete_all Product.create(:title =&gt;'开发人员的网页设计',   :description =&gt;     %{

            等等等等       

    },   :image_url =&gt; 'wd4d.jpg',
      :price =&gt; 42.95)

    。 。

    Product.create(:title =&gt;'Programming Ruby 1.9',   :description =&gt;     %{

            等等等等。       

    },   :image_url =&gt; '/images/ruby.jpg',   :price =&gt; 49.50)

    。 。

    Product.create(:title =&gt;'Rails Test Prescriptions',   :description =&gt;     %{

            等等等等       

    },   :image_url =&gt; '/images/rtp.jpg',   :price =&gt; 43.75)

4 个答案:

答案 0 :(得分:6)

好的,所以我一直在完成这本书,你必须在两个地方做出改变。

在种子文件中,只需引用jpg的名称。由于您使用的是rails 3.1,因此资产/ images /中的任何内容都可以通过它的名称引用。

您还必须对视图进行更改。在此处下载本书的来源http://pragprog.com/titles/rails4/source_code,并查看他们对于产品#index视图的库2的内容。在这个版本中他们真的很草率。

答案 1 :(得分:3)

查看Rails 3.1 Guide to Asset Pipeline。在2.2编码链接到资产中,您将找到以下内容:

  

在常规视图中,您可以访问assets / images目录中的图像,如下所示:

     

<%= image_tag "rails.png" %>

由于我理解您的代码(我可能在这里错了),您尝试将图像的文件名存储在数据库中,并稍后将该图像与其他对象数据一起显示。所以你应该尝试从中删除路径,只使用文件名。然后使用方法image_tag表示它。

答案 2 :(得分:1)

我遇到了同样的问题然后意识到当我下载Depot应用程序的测试图像时,它们被保存为XXX.jpeg而不是XXX.jpg。因此,seeds.rb中的URL与assets / images中的文件名不匹配。

答案 3 :(得分:1)

唯一对我有用的是:

<%= image_tag('/assets/images/' + product.image_url, class: 'list_image') %>