[英]Images working/showing in my new Rails app
更新:確定這很奇怪,在瀏覽器中,我可以訪問localhost:3000 / assets / images / rails.png中的圖像但是當我將該路徑放入seeds.rb文件然后加載頁面時,它顯示它是試圖在/assets/rails.png中找到圖像,即它正在跳過圖像文件夾...任何想法?
是否可以將rails配置到某個位置以僅查看兩個文件夾?
我正在使用一本名為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 =>'Web Design for Developers',:description =>%{
等等等等
},:image_url =>'wd4d.jpg',Product.create(:title =>'Programming Ruby 1.9',:description =>%{
等等等等。
},:image_url =>'/ images / ruby.jpg',:price => 49.50)Product.create(:title =>'Rails Test Prescriptions',:description =>%{
等等等等
},:image_url =>'/ images / rtp.jpg',:price => 43.75)好的,所以我一直在完成這本書,你必須在2個地方做出改變。
在種子文件中,只需引用jpg的名稱。 由於您使用的是rails 3.1,因此資產/ images /中的任何內容都可以通過它的名稱引用。
您還必須對視圖進行更改。 在http://pragprog.com/titles/rails4/source_code下載本書的源代碼,並查看他們對於產品#index視圖的庫2的內容。 這個版本讓他們變得非常草率。
看看Rails 3.1資產管道指南 。 在2.2編碼鏈接到資產中,您將找到以下內容:
在常規視圖中,您可以訪問assets / images目錄中的圖像,如下所示:
<%= image_tag "rails.png" %>
正如我理解你的代碼(我可能在這里錯了),你試圖將圖像的文件名存儲在數據庫中,然后將該圖像與其他對象數據一起顯示出來。 所以你應該嘗試從中刪除路徑,只使用文件名。 然后使用image_tag
方法表示它。
我遇到了同樣的問題然后意識到當我下載Depot應用程序的測試圖像時,它們被保存為XXX.jpeg而不是XXX.jpg。 因此,seeds.rb中的URL與assets / images中的文件名不匹配。
唯一對我有用的是:
<%= image_tag('/assets/images/' + product.image_url, class: 'list_image') %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.