2012-07-27 7 views
6

Potrzebuję mojego użytkownika do przesyłania dokumentów takich jak pdf i txt do ich profilu. Zrobiłem to za pomocą Carrierwave, więc mam listę dokumentów z tytułami i adresami URL.Szyny: Jak pobrać wcześniej przesłany dokument?

Ale w jaki sposób mogę zmusić innych użytkowników do pobrania tych plików? Czy muszę używać jakiegoś klejnotu, czy jest coś naturalnego, czego nawet nie znam, ponieważ jestem nowy na szynach?

Dzięki

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 

A potem to w widoku I chcesz pobrać pliki:

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

Może głupie pytanie: co powiesz na przekazanie URLów innym użytkownikom? – Romain

+0

Niestety nie rozumiem co masz na myśli =) – Barbared

+1

Zobacz odpowiedź @ anthonyalberto. – Romain

Odpowiedz

8

Nie używam Carrierwave, ale przypuszczam, że jest podobny do Paperclip.

Dlatego powinieneś być w stanie użyć czegoś jak ten

link_to 'Download file', user.file.url 

to zakładając masz instancja użytkownika obiektu z modelu z „Plik” atrybutu carrierwave. Zastąp to swoją nazwą atrybutu.

+0

Próbowałem, ale nie działa, jestem pewien, że coś złego. Tak jak powiedziałeś (zobacz w edytowanym pytaniu powyżej) – Barbared

+0

Następnie spróbuj 'doc.url.url', ponieważ twoim atrybutem jest 'url' i musisz wywołać na nim metodę 'url'. Mam nadzieję, że "url" nie jest zarezerwowany przez carrierwave, w przeciwnym razie zmień nazwę atrybutu mount_uploader –

+0

Ahhh To dziękuję bardzo! ^^ – Barbared

8

Możesz użyć do tego metody send_file. Które może wyglądać następująco:

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 

Sprawdź link do aplikacji apidock, by zobaczyć więcej przykładów.

+0

Używam klejnotu Carrierwave, a kiedy go ściągam, jeśli nazwa tego pliku zawiera spację, to jest przekształcana w podkreślenia. Jak usunąć podkreślenie z nazwy pliku podczas pobierania? –

+1

@huzefa spróbuj wywołać .humanize na łańcuchu nazwy pliku – NathanTempelman

Powiązane problemy