从视图中将照片添加到模型的has_many模型中

时间:2009-01-04 03:18:09

标签: ruby-on-rails

我有一个模型,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,它工作正常,因为它显示表单,但当然它与正确的模型无关。

3 个答案:

答案 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

如果我正确理解了这个问题,这可能有所帮助。