使用Carrierwave和Formtastic上传文件的Rails 3

3
我可以帮你翻译成中文。这段内容涉及IT技术,是关于一个包含多张照片的产品,并给出了以下关系:
产品.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>

我在这里找到了一个和我遇到的同样错误相关的问题尝试了他们的解决方案仍然存在相同的问题。
我使用Friendly_Id, ActiveAdmin, Globalize3,也许它们之间有一些关系,这是我在Rails上的第一个项目,现在我不知道可能是什么问题...
1个回答

2
你的问题在于,在模型中将photos声明为has_many关联,并在视图中将其声明为单个文件输入。你可以选择其中之一:多个或一个。
你可能想要做的是在产品表单中将照片作为嵌套模型 - 就像这样:
semantic_form_for @product do |f|
  f.semantic_fields_for :photos do |ff|
    ff.input :photo, as: :file

为了循环遍历产品中的每张照片,并为每张照片显示一个文件输入字段。

非常感谢您的回复。编辑之前的代码运行良好: f.semantic_fields_for :photos do |ff| ff.input :photo, as: :file end - jonfer
但是如果没有照片,它不会显示任何文件输入字段。我只想要一个文件输入字段,这样它就可以创建一个新的照片。 - jonfer
然后你必须在你的控制器中创建一个照片实例。例如:@product.photos.build 表单无法显示不存在的内容。 - sevenseacat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接