2012-10-03 7 views
6

Paperclip fornisce un metodo .url per ottenere l'URL di un allegato da includere in una vista.Qual è il modo standard/corretto per aprire un allegato a forma di graffetta all'interno di Ruby?

In realtà ho bisogno di aprire un allegato come file all'interno di Ruby.

Circa sei mesi fa, l'ultima revisione di Paperclip ci ha permesso di chiamare to_file sull'oggetto allegato. Sebbene non fosse documentato, ha funzionato in modo coerente. Ma a un certo punto ha smesso di funzionare.

Desidero poter aprire il file stesso da un validatore (nel qual caso non è stato ancora salvato nella sua posizione finale) o da un altro metodo completamente dopo che l'oggetto ActiveModel è stato salvato (nel qual caso il file è stato spostato nella sua posizione finale, che potrebbe essere su Amazon S3).

sembra che le opzioni sono:

file = File.new(object.attachment.path) 

... che funziona solo con file locali, non quelli su S3. Oppure:

file = object.attachment.queued_for_write[:original] 

... che funziona solo prima del primo salvataggio (credo)?

Sembra che ci dovrebbe essere un modo semplice per aprire il file (che, nel caso di qualcosa come Amazon S3, potrebbe comportare la sua copia in una posizione temporanea) e immagino che la risposta abbia qualcosa da fare con io_adapters, ma ho letto il codice (e alcune domande StackOverflow) e sono ancora perplesso.

Esiste un modo standard per aprire un allegato a graffetta come un file che funziona in tutti i casi?

risposta

4

questo modo si ottiene il file (assumendo yourmodel attribuisce un file

require 'open-uri' 

file = open(yourmodel.file.url) 
+1

Questo non richiede che il file è già stato salvato? Il modo corretto dovrebbe funzionare quando il file è temporaneo. – DDDD

+2

Ciò non funziona quando il file non è su S3 - ad esempio, dev vs. prod. – user1032752

Problemi correlati