2010-07-15 78 views
1

我有一個頁面,我可以查看產品,並直接從此頁面用戶可以添加和刪除與產品相關聯的多個圖像。我在表單中使用回形針上傳新文件。Rails與模型協會回形針

由於可以爲產品保存多個圖像,因此我創建了屬於產品模型的圖像模型。由於關聯,無法使用默認的回形針文件輸入。我的解決方案正在工作,但我想知道是否有一個更好的方式來實現這個沒有我砍的所有html的工作。

class Image < ActiveRecord::Base
belongs_to :product

class Product < ActiveRecord::Base
has_many :images, :dependent => :destroy accepts_nested_attributes_for :images, :allow_destroy => true

show.html.erb

<% @product.images.build %>
<%= form_for(@product, :html => { :multipart => true }) do |f| %>

<input id="image" name="product[images_attributes][<%= @product.images.count %>][photo]" >size="30" type="file" onchange="this.form.submit();" />

<% end %>

回答

1

正如您最有可能意識到的,在您的控制器中,您可以使用@ product.images.build構建一些空文件輸入;而在兩個編輯視圖,並創建你可以做這樣的事情:

<% f.fields_for :images do |img| %> 

    <% if img.object.data_file_name %> 
    <%= image_tag img.object.data.url(:thumb) %> 
    <%= link_to 'Delete', img.object, {:method => :delete, :confirm => 'Are you sure?'} %> 
    <% else %> 
    <%= img.file_field :data %> 
    <% end %> 

<% end %> 

這個特殊的例子,需要有破壞作用的圖像控制器,但它應該工作得相當好,即使圖像是多態的。

+0

謝謝,我在2周前開始在rails中編寫代碼,並且不知道.object,現在非常簡單! – David 2010-07-16 12:47:52