2009-01-04 58 views
1

我有一個模型,Thing,與ThingPhoto有一個has_many,使用Paperclip來管理一切。在Thing的「show」視圖中,我想要上傳文件,並將其與Thing模型相關聯。從一個視圖向模型的has_many模型添加一張照片

出於某種原因,我完全在如何做到這一點應該做的小事。我試着這樣做(Haml的):

- form_for @thing.thing_photos, :html => {:multipart => true} do |f| 
    = f.file_field :photo 
    = f.submit 

...我得到這個錯誤:

undefined method `array_path' for #<ActionView::Base:0x24d42b4> 

谷歌失敗了我。我相信這很容易,但我無法把它放在腦海裏。

編輯:我應該提到,如果我將@ thing.thing_photos更改爲@thing,它可以正常工作,因爲它顯示了表單,但它當然不與正確的模型關聯。

回答

1

嘗試@thing.thing_photos.new

這應該實例thing_photos的新模式。如果您不使用嵌套路線,則必須將thing_id添加爲隱藏字段。

0

如果你不綁在回形針(如果你只是在做圖像),我已經有很多運氣fleximage。它具有非常好的圖像上傳,操作和顯示的文檔(具有諸如水印和其他東西的各種整齊效果)。

它不完全回答你的問題,但它可能是一個很酷的事情,看看。

但我敢打賭,你的問題與你爲對象數組創建表單(通過關聯)有關。我敢打賭,找到對象的類型(應該是「thing_photo」,但在你的例子中是「數組」),並追加「路徑」來寫入表單發佈URL。也許你應該添加一個.first或創建一個部分?

0

的形式應該是@thing_photo,應要麼在thing_id通過或者如果它是一個嵌套的路線,你可以從

然後在thing_photos控制器

@thing_photo = Photo.new(params[:thing_photo]) 
#if using nested route 
@thing = Thing.find(params[:thing_id]) 

#if using hidden field 
@thing = Thing.find(params[:thing_photo][:thing_id]) 

if @thing_photo.save 
    #this is what ties the thing photo to the thing 
    @thing.thing_photos << @thing_photo 
end 

得到它,如果我的理解問題正確,這可能會有所幫助。

相關問題