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