Как импортировать файл в Carrierwave - PullRequest
4 голосов
/ 08 апреля 2011

Итак, у меня есть приложение, использующее rails 3 и mongodb, которое обслуживает файлы.Я хочу импортировать все файлы в gridfs, используя процесс бегуна, не создавая новые ObjectId для файлов, уже находящихся в системе.По сути, я хочу прикрепить файлы с помощью carrierwave к файловому объекту, уже находящемуся в базе данных.

По какой-то причине, когда я создаю новый файл документа, я могу без проблем прикрепить локальный файл.Однако я не могу прикрепить локальный файл к ранее созданному документу.

Я пробовал каждую форму обновления Mongoid и каждый раз получаю метод, отсутствующий или неопознанный метод.

Так, например, это работает:

somefile = Upload.new(
  :name => "somefile.ext"
)
somefile.upload = File.open("/foo/bar.ext")
somefile.save!

Но это не так:

somefile = Upload.first(:conditions => {:name => "somefile.ext"})
somefile.upload = File.open("/foo/bar.ext")
somefile.save!

Есть идеи?

1 Ответ

1 голос
/ 18 апреля 2012

Вы можете сохранить новый файл для существующего объекта следующим образом:

somefile = Upload.find_by_name("somefile.ext").first
unless somefile.blank?
  somefile.remove_upload = true
  somefile.save!
  somefile.upload = File.open("/foo/bar.ext")
  somefile.save!
end

Как видите,

somefile.remove_upload = true

означает

somefile.remove_your_mounted_uploader = true
...