Использование Paperclip в seeds.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...
Мои изображения скопированы, поэтому мне не нужно их создавать; но мне нужна запись. Я не могу прокомментировать директиву paperclip в моей модели; то это работает; но я думаю, что может быть другое решение.
Есть ли еще один образец для его выполнения? Или поворот, чтобы сообщить скрепки не обрабатывать изображение?
Ответы
Ответ 1
Вместо того, чтобы напрямую устанавливать столбцы активов, попробуйте использовать скрепку и установите ее как объект Ruby File
.
Image.create({
:id => 52,
:asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')),
:product_id => 52
})
Ответ 2
Другой ответ здесь, безусловно, работает для большинства ситуаций, но в некоторых случаях может оказаться лучше предоставить 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 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 файлы, потому что проверки в противном случае не будут выполнены, и ваш объект не будет создан. Это не повлияло бы на ситуацию с ОП, но это повлияло на мое, и поэтому я хочу оставить свое решение на тот случай, если кому-то это понадобится.