2013-02-24 8 views
11

Diciamo dice che ho la seguente voce nel mio file seeds.rb:Utilizzando Paperclip entro seeds.rb

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

Se ho seme, esso tenta di elaborare l'immagine specificata, ottengo questo errore:

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

Le immagini vengono salvate, quindi non ho davvero bisogno di crearle; ma ho bisogno del disco, però. Non posso commentare la direttiva paperclip nel mio modello; allora funziona; ma immagino ci possa essere un'altra soluzione.

Esiste un altro schema da seguire per raggiungerlo? O un inversione di tendenza per dire a paperclip di non elaborare l'immagine?

risposta

37

Invece di impostare direttamente le colonne delle risorse, prova a utilizzare la graffetta e impostala come rubino File oggetto.

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

Si consiglia di utilizzare 'File.join' invece della stringa interpolata. 'File.join (Rails.root, 'percorso', 'a', 'somefile.jpg')' – Aleksey

1

L'altra risposta lavora qui sicuramente per la maggior parte delle situazioni, ma in alcuni casi può essere ancora meglio per fornire un UploadedFile piuttosto che un File. Questo imita più da vicino ciò che Paperclip avrebbe ricevuto da un modulo e fornisce alcune funzionalità aggiuntive.

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 
) 
) 

Anche se questo codice è un po 'più complicato, ma ha il vantaggio di interpretare correttamente i documenti di Microsoft Office con .docx, .pptx, .xlsx o estensioni che, se collegato tramite un oggetto File, verrà caricato come zip File.

Ciò è particolarmente importante se il modello consente i documenti di Microsoft Office ma non consente i file zip, perché altrimenti le convalide falliranno e il tuo oggetto non verrà creato. Non avrebbe influenzato la situazione del PO, ma ha influito sul mio, e quindi vorrei lasciare la mia soluzione nel caso in cui qualcun altro ne avesse bisogno.

+1

questa è una soluzione migliore per gestire più tipi di file. questo funziona anche con i caratteri. –