2012-07-27 5 views
6

Ho bisogno che il mio utente carichi documenti come pdf e txt sul suo profilo. E l'ho fatto usando Carrierwave, quindi ho una lista di documenti con titoli e url.Rails: come scaricare un documento precedentemente caricato?

Ma come posso fare in modo che altri utenti scarichino questi file? Devo usare una gemma o c'è qualcosa di nativo che non conosco nemmeno da quando sono molto nuovo alle rotaie?

Grazie

EDIT:

society.rb

class Society < ActiveRecord::Base 
    ... 
    has_many :documents, :dependent => :destroy 
end 

document.rb

class Document < ActiveRecord::Base 
    belongs_to :society  
    mount_uploader :url, DocumentUploader  
end 

E poi questo nella vista Vorrei scaricare i file:

<% @society.documents.each do |doc| %> 
    <%= link_to "Download it", doc.url %> //url is the column name of the saved url 
    <% end %> 
+0

Forse una domanda stupida: che ne dici di consegnare gli URL che hai citato ad altri utenti? – Romain

+0

Scusa non capisco cosa intendi =) – Barbared

+1

Vedi la risposta di @ anthonyalberto. – Romain

risposta

8

Non utilizzo Carrierwave ma suppongo che sia simile a Paperclip.

Pertanto si dovrebbe essere in grado di utilizzare qualcosa di simile

link_to 'Download file', user.file.url 

Ciò presuppone di avere un oggetto utente istanziato da una modella con un attributo carrierwave 'file'. Sostituisci questo con il tuo nome attributo.

+0

Ho provato ma non funziona, sono sicuro di aver sbagliato qualcosa. Mi è piaciuto come hai detto, (vedi nella domanda sopra riportata) – Barbared

+0

Quindi prova 'doc.url.url' perché il tuo attributo è 'url' e devi chiamare il metodo 'url' su di esso. Speriamo che 'url' non sia riservato da carrierwave, altrimenti, cambia il nome dell'attributo mount_uploader –

+0

Ahhh Funziona grazie mille! ^^ – Barbared

8

Per questo è possibile utilizzare il metodo send_file. Quale potrebbe essere simile:

class MyController 
    def download_file 
    @model = MyModel.find(params[:id]) 
    send_file(@model.file.path, 
      :filename => @model.file.name, 
      :type => @model.file.content_type, 
      :disposition => 'attachment', 
      :url_based_filename => true) 
    end 
end 

Controllare il link apidock per ulteriori esempi.

+0

Sto usando la gemma Carrierwave e quando scarico il file, se il nome del file contiene spazio, viene convertito in caratteri di sottolineatura. Quindi, come rimuovere quel carattere di sottolineatura dal nome del file durante il download? –

+1

@huzefa prova a chiamare .humanize sulla stringa del nome file – NathanTempelman