2013-02-24 5 views
11

Lassen Sie uns sagt, dass ich den folgenden Eintrag in meiner seeds.rb Datei haben:Büroklammer innerhalb seeds.rb

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

Wenn ich es Samen, es ist das Bild angegeben zu verarbeiten versucht, bekomme ich diesen Fehler:

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

Meine Bilder sind gesichert, also muss ich sie nicht wirklich erstellen; aber ich brauche die Platte. Ich kann die Büroklammer-Anweisung in meinem Modell nicht kommentieren; dann funktioniert es; aber ich denke, es könnte eine andere Lösung geben.

Gibt es noch ein anderes Muster, um es zu erreichen? Oder eine Umkehrung, um der Büroklammer zu sagen, das Bild nicht zu verarbeiten?

Antwort

37

Anstatt die Asset-Spalten direkt zu setzen, versuchen Sie, die Büroklammer zu verwenden und sie als Ruby-Objekt File festzulegen.

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

Ich empfehle, 'File.join' anstelle der interpolierenden Zeichenfolge zu verwenden. 'File.join (Rails.root, 'path', 'to', 'somefile.jpg')' – Aleksey

1

Die andere Antwort ist hier sicherlich funktioniert für die meisten Situationen, aber in manchen Fällen kann es besser sein, noch eine UploadedFile eher als ein File bereitzustellen. Dies ahmt genauer nach, was Paperclip von einem Formular erhält und bietet zusätzliche Funktionen.

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

Während dieser Code etwas komplizierter ist, hat es den Vorteil von Microsoft Office-Dokumenten mit DOCX, PPTX oder XLSX-Erweiterungen richtig zu interpretieren, die angebracht, wenn ein File-Objekt verwendet, werden als zip hochgeladen werden Dateien.

Dies ist besonders wichtig, wenn Ihr Modell Microsoft Office-Dokumente zulässt, aber keine Zip-Dateien zulässt, da sonst Validierungen fehlschlagen und Ihr Objekt nicht erstellt wird. Es hätte die Situation des OP nicht beeinflusst, aber es hat meine Situation beeinflusst, und deshalb möchte ich meine Lösung für den Fall verlassen, dass es jemand anderes braucht.

+1

Dies ist eine bessere Lösung, um mehr Dateitypen zu verarbeiten. Dies funktioniert auch mit Schriftarten. –