更新: 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 %>
第3。 db / seeds.rb (请注意我在这里尝试了图片网址)
Product.delete_all Product.create(:title =&gt;'开发人员的网页设计', :description =&gt; %{
等等等等
}, :image_url =&gt; 'wd4d.jpg',
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)
答案 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') %>