Неопределенный метод 'метаданные' при загрузке с использованием драгоценного камня mongoid-paperclip - PullRequest
2 голосов
/ 11 июня 2011

Не могу понять, почему я получаю это при попытке загрузить файлы с помощью 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

Кто-нибудь еще сталкивался с этим?

Ответы [ 2 ]

1 голос
/ 29 августа 2012

У меня есть загрузчик:

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 %>

Я думаю, что это довольно изящный способ решения проблемы.

0 голосов
/ 29 августа 2011

Как я уже говорил выше, у меня была похожая проблема с Mongoid, Carrierwave и GridFS.
Мое решение супер хакерское, но оно сработало для меня.
У меня был класс 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.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

Я пробовал это с изображением =, но оно бесконечно повторялось и совершало злые поступки.
Я тоже попробовал это

file_field "article[image]", :image

без сеттера, и это не вызвало исключения, но и не сохранило мое изображение.

Насколько я знаю, скрепка очень похожа в этом отношении. Может быть, это будет работать для кого-то или кто-то может навести порядок в моем беспорядке

...