在尝试使用Mongoid和Paperclip上传文件时,找不到为什么会出现这种情况。
undefined method `metadata' for #<ActionDispatch::Http::UploadedFile:0x10625e930>
我正在运行以下(最新的回形针、mongoid回形针和aws-s3):
gem "rails", "3.0.6"
gem "mongoid", "2.0.1"
gem "bson_ext", "1.3.0"
gem "paperclip"
gem "mongoid-paperclip", :require => "mongoid_paperclip"
gem "aws-s3", :require => "aws/s3"
我看到一些地方建议将以下内容添加到类似的初始值设定项中。我这样做了,但没有用。
if defined? ActionDispatch::Http::UploadedFile
ActionDispatch::Http::UploadedFile.send(:include, Paperclip::Upfile)
end
还有人遇到这种情况吗?
我有上传程序:
class Image
include Mongoid::Document
embedded_in :imageable, polymorphic: true
mount_uploader :file, ImageUploader
end
它用于我所有包含图像的类,例如:
class Shop
include Mongoid::Document
embeds_one :logo, as: :imageable, :class_name => 'Image', cascade_callbacks: true
end
然后在形式上看起来像这样:
<%= form_for @shop do |f| %>
<%= f.fields_for :cover do |u|%>
<%= u.file_field :file %>
<% end %>
<%= f.submit 'Save' %>
<% end %>
我认为这是处理这个问题的一个非常巧妙的方法。
如上所述,我在Mongoid、Carrierwave和GridFS方面也遇到了类似的问题
我的解决方案非常棘手,但对我来说很有效。
我有一个图像类,这就是我的图像安装的地方
class Image
include Mongoid::Document
include Mongoid::Timestamps
field :title
field :image
field :order
mount_uploader :image, ImageUploader
embedded_in :article
end
class Article
include Mongoid::Document
...
embeds_one :image
...
end
我的carrierwave上传器希望将属性与挂载上传器的密钥(图像)一起发送给它。
Image.create( :image => image_attributes)
但这篇文章的新编辑形式创造了一个看起来像的东西
:article => { :image => #ActionDispatch... }
而不是
:article => { :image => { :image => #ActionDispatch... } }
所以我的解决方案是将表单中字段的名称更改为
file_field :article, :photo
然后将照片设置器添加到创建图像的文章类中
model Article
include Mongoid::Document
...
def photo=(attrs)
create_image(:image => attrs)
end
end
我用image=尝试过这个,但它无限重复,做了坏事
我也试过这个
file_field "article[image]", :image
没有setter,它没有引发异常,但也没有保存我的图像。
据我所知,回形针在这些方面很相似。也许这对某人有用,或者有人可以清理我的烂摊子