我有一个模型,Thing,与ThingPhoto有一个has_many,使用Paperclip管理所有内容。在Thing的“show”视图中,我想要上传文件,并将其与Thing模型相关联。
出于某种原因,我完全不知道应该怎么做。我试过这样做(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,它工作正常,因为它显示表单,但当然它与正确的模型无关。
答案 0 :(得分:1)
尝试@thing.thing_photos.new
这应该是thing_photos的新模型。如果您没有使用嵌套路由,则必须将thing_id添加为隐藏字段。
答案 1 :(得分:0)
如果你没有被Paperclip束缚(如果你只是做图像),那么fleximage的运气已经很多。它具有非常好的图像上传,操作和显示文档(具有各种整洁的效果,如水印和东西)。
它并没有完全回答你的问题,但它可能是一件很酷的事情。
但是我打赌你的问题与你正在为一个对象数组创建一个表单(通过一个关联)有关。我打赌一些东西是找到对象的类型(应该是“thing_photo”,但在你的例子中是“数组”),并附加“路径”来写它形式的帖子URL。也许您应该添加.first
或创建部分?
答案 2 :(得分: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
如果我正确理解了这个问题,这可能有所帮助。