What's the best way to create a download link? Is there a better way than the following?
I was thinking of using link_to "Download", :controller => ..., :action => ...", :id => ...
in the view.
Adding match /documents/download/:id => documents#download
to routes.rb
And in the controller:
def download
send_file ...
end
Also, I'd like, if possible, for the user to remain on the same page as the link.
Thanks.
I add the download action as a restful route in a resources block. Here's typical code for me:
routes.rb
resources :things do
member do
get :download
end
end
model:
has_attached_file :document,
:path => ':rails_root/assets/documents/:id/:basename.:extension'
attr_protected :document_file_name, :document_content_type, :document_file_size
controller:
def download
send_file @thing.document.path, :type => 'application/pdf', :filename => @thing.permalink
end
view:
<%= link_to 'Download', download_thing_path(@thing) %>
This keeps the user on the same page, and just initiates the download with my suggested name (I use permalink).
What do you mean by dynamically generated? Are they uploaded by you or created by your application on the fly?
You could just have your download logic in your show action and give it:
<%= link_to "Download", document_path(document) %>
I'm pretty sure that the :controller / :action / :id method of linking is frowned upon.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With