在尝试使用Mongoid和Paperclip上传文件时,无法找到原因。
undefined method `metadata' for #<ActionDispatch::Http::UploadedFile:0x10625e930>
我正在运行以下(最新的paperclip,mongoid-paperclip和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
其他人遇到过这个吗?
答案 0 :(得分:1)
我有上传者:
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 %>
我认为这是处理问题的一种非常巧妙的方式。
答案 1 :(得分:0)
正如我上面所说,我遇到类似Mongoid, Carrierwave 和GridFS的问题。
我的解决方案是超级hacky,但它对我有用
我有一个Image类,这是我的图像安装的地方
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上传器需要使用mount uploader(image)的键发送给它的属性。
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并且它没有引发异常,但它也没有保存我的图像。
据我所知,回形针在这些方面非常相似。也许这适用于某人或某人可以清理我的烂摊子