2012-10-30 35 views
3

我有一個產品與許多照片。的關係是這樣的:與Carrierwave和Formtastic的Rails 3文件上傳

product.rb

class Product < ActiveRecord::Base 
    has_many :photos, :dependent => :destroy 
    attr_accessible :translations_attributes, :active, :category_id, :photos 
    accepts_nested_attributes_for :translations, :photos 

photo.rb

class Photo < ActiveRecord::Base 
    attr_accessible :photo, :product_id 
    belongs_to :attachable 
    mount_uploader :photo, PhotoUploader 

和形式如下:

form(:html => { :multipart => true }) do |f| 
f.inputs "Details" do 
    f.input :active 
    f.input :category, :include_blank => false 
end 

f.inputs "Photos" do 
    f.input :photos, :as => :file 
end 

f.buttons 

的問題是我克等創建這個錯誤時/附帶文件更新產品:

undefined method `each' for #<ActionDispatch::Http::UploadedFile:0x007f93c8549828> 

我發現了同樣的錯誤here一個問題,但即使想他們的解決方案仍然有同樣的問題。

我使用Friendly_Id,ActiveAdmin,Globalize3,也許這可能與他們有一定的關係,這是我用Rails和現在我不知道這可能是第一個項目......

回答

2

你的問題是你聲明photos在你的模型中是一個has_many關聯,並在視圖中聲明它爲單個文件輸入。許多或一個,你挑:)

什麼你可能想要做的是有照片作爲你的產品形式嵌套模式 - 像這樣:

semantic_form_for @product do |f| 
    f.semantic_fields_for :photos do |ff| 
    ff.input :photo, as: :file 

要遍歷每個在你的產品中的照片,並顯示每個文件的輸入字段。

+0

非常感謝您的回覆。編輯前的工作正常:f.semantic_fields_for:photos do | ff | ff.input:照片,如下::文件 結束 – jonfer

+0

但是,如果沒有照片,則不顯示任何文件輸入字段。我只想要1個文件輸入字段,因此它會創建一張新照片。 – jonfer

+0

然後,您必須在您的控制器中創建一個照片實例。例如。 '@ product.photos.build'表單不能顯示不存在的內容。 – sevenseacat