2012-07-27 7 views
6

Ich brauche meinen Benutzer, um Dokumente wie ad pdf und txt auf ihr Profil hochzuladen. Und das habe ich mit Carrierwave gemacht, also habe ich eine Liste von Dokumenten mit Titeln und URLs.Schienen: Wie kann man ein zuvor hochgeladenes Dokument herunterladen?

Aber wie kann ich andere Benutzer diese Dateien herunterladen lassen? Muss ich ein Schmuckstück verwenden oder gibt es etwas, das ich noch nicht kenne, da ich noch nicht so gut mit Schienen zu tun habe?

Dank

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 

Und das dann in der Ansicht Ich möchte Dateien herunterladen:

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

Vielleicht dumme Frage: Wie wäre es mit der Weitergabe der URLs an andere Benutzer? – Romain

+0

Sorry, ich verstehe nicht, was du meinst =) – Barbared

+1

Siehe @ Anthonyalberto's Antwort. – Romain

Antwort

8

Ich benutze Carrierwave nicht, aber ich denke, es ist ähnlich Paperclip.

Daher sollen Sie in der Lage sein, etwas zu verwenden, wie dies

link_to 'Download file', user.file.url 

Dies wird vorausgesetzt, Sie einen Benutzer instanzierte Objekt von einem Modell mit einem ‚Datei‘ carrierwave Attribute haben. Ersetzen Sie dies durch Ihren Attributnamen.

+0

Ich habe versucht, aber ich arbeite nicht, ich bin mir sicher, dass ich etwas falsch machen. Ich sagte, Sie sagten, (siehe in der editierten Frage oben) – Barbared

+0

Dann versuchen Sie 'doc.url.url', weil Ihr Attribut 'URL' ist und Sie die Methode 'URL' darauf aufrufen müssen. Hoffentlich ist "URL" nicht von carrierwave reserviert, ansonsten ändere den Namen deines mount_uploader Attributs –

+0

Ahhh Es funktioniert, vielen Dank! ^^ – Barbared

8

Sie können dazu die Methode send_file verwenden. Das könnte so aussehen:

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 

Überprüfen Sie den Apidock-Link für weitere Beispiele.

+0

Ich benutze Carrierwave gem und wenn ich die Datei lade, wenn dieser Dateiname Leerzeichen enthält, wird er in Unterstriche konvertiert. Also, wie kann man den Unterstrich während des Herunterladens aus dem Dateinamen entfernen? –

+1

@huzefa versuchen anrufen .humanize auf den Dateinamen Zeichenfolge – NathanTempelman

Verwandte Themen