Использование Paperclip в seed.rb

Допустим, у меня есть следующая запись в моем файле seeds.rb:

Image.create(:id => 52, :asset_file_name => "somefile.jpg", :asset_file_size => 101668, :asset_content_type => "image/jpeg", :product_id => 52)

Если я засею его, он попытается обработать указанное изображение, я получаю эту ошибку:

No such file or directory - {file path} etc...

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

Есть ли другой шаблон, которому нужно следовать, чтобы достичь этого? Или поворот, чтобы сказать скрепке не обрабатывать изображение?


person Ben    schedule 24.02.2013    source источник


Ответы (2)


Вместо того, чтобы устанавливать столбцы активов напрямую, попробуйте использовать скрепку и установить ее как объект ruby ​​File.

Image.create({
  :id => 52, 
  :asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')),
  :product_id => 52
})
person Greg W    schedule 25.02.2013
comment
Я рекомендую использовать File.join вместо интерполирующей строки. File.join(Rails.root, 'path', 'to', 'somefile.jpg') - person Aleksey; 06.07.2016

Другой ответ здесь, безусловно, работает для большинства ситуаций, но в некоторых случаях может быть лучше указать UploadedFile, а не File. Это более точно имитирует то, что Paperclip получит от формы, и предоставляет некоторые дополнительные функции.

image_path = "#{Rails.root}/path/to/image_file.extension"
image_file = File.new(image_path)

Image.create(
  :id => 52,
  :product_id => 52,
  :asset => ActionDispatch::Http::UploadedFile.new(
    :filename => File.basename(image_file),
    :tempfile => image_file,
    # detect the image's mime type with MIME if you can't provide it yourself.
    :type => MIME::Types.type_for(image_path).first.content_type
  )
)

Хотя этот код несколько сложнее, его преимущество заключается в правильной интерпретации документов Microsoft Office с расширениями .docx, .pptx или .xlsx, которые, если они присоединены с помощью объекта File, будут загружены в виде zip-файлов.

Это особенно важно, если ваша модель разрешает документы Microsoft Office, но не разрешает zip-файлы, потому что в противном случае проверки не пройдут, и ваш объект не будет создан. Это не повлияло бы на ситуацию с ОП, но повлияло на мою, поэтому я хочу оставить свое решение на случай, если оно кому-то еще понадобится.

person februaryInk    schedule 30.09.2015
comment
это лучшее решение для обработки большего количества типов файлов. это работает и со шрифтами. - person jacob bullock; 13.05.2016