2013-02-24 1 views
11

Давайте говорит, что я следующую запись в моем 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 в моей модели; то это работает; но я думаю, что может быть другое решение.

Существует ли другой образец для его выполнения? Или поворот, чтобы сообщить скрепки не обрабатывать изображение?

ответ

37

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

Image.create({ 
    :id => 52, 
    :asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')), 
    :product_id => 52 
}) 
+3

Я рекомендую использовать 'File.join' вместо интерполяции строки. 'File.join (Rails.root, 'path', 'to', 'somefile.jpg')' – Aleksey

1

Другой ответ здесь, безусловно, работает для большинства ситуаций, но в некоторых случаях это может быть еще лучше, чтобы обеспечить 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, будет загружен в почтовый индекс файлы.

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

+1

Это лучшее решение для обработки большего количества типов файлов. это работает и с шрифтами. –