2009-01-04 61 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 

得到它,如果我的理解问题正确,这可能会有所帮助。