2010-11-10 16 views
1

Première utilisation des rails, j'essaye de créer un lien de téléchargement pour obtenir quelque chose du système de fichiers.Rails: send_file ne provoque pas de téléchargement, liens vers la méthode de contrôleur 'show' à la place

À mon avis, j'ai

<%= link_to 'Show', upload, :method => :download %> 

et ma méthode « téléchargement » dans mon contrôleur ressemble à:

def download 
    @upload = Upload.find(params[:id]) 
    send_file '/data_store/50692.pdf' 

Cela est nécessaire parce que j'ai restrictions sur qui peut voir ce pdf, mais sur cette page, je reçois liée à

http://localhost:3000/uploads/10 

(10 est l'id de cette 'upload')

et sur cette page, je reçois l'erreur

Unknown action 

No action responded to 10. Actions: clearance, create, destroy, download, edit, index, is_admin, new, show, su_required, and update 

Je veux au lieu de rester sur la même page, et offrir à l'utilisateur une invite de téléchargement, mais je ne sais pas ce que je fais faux.

Répondre

0

Je pense que c'est un problème dans la méthode de téléchargement appelant.

Essayez celui

<%= link_to "Show",:controller=>'controllername',:action=>'download',:id=>upload.id %> 

Vous devez passer votre nom de contrôleur dans le lieu « nomducontroleur ».

2

Idéalement, vous devriez regarder dans un appel Ajax si vous voulez rester sur la même page et offrir à l'utilisateur une invite de téléchargement, mais le code donné ci-dessous fonctionnerait également. En cliquant sur le lien "télécharger", un nouvel onglet/une nouvelle fenêtre s'ouvrira, l'utilisateur recevra une invite de téléchargement et fermera l'onglet/la fenêtre.

Le paramètre :method à link_to indique également la méthode HTTP (POST, GET, DELETE, PUT) à utiliser. Pour référencer la méthode "téléchargement" dans votre contrôleur, utilisez le paramètre :action.

view 
---- 
<%= link_to 'Show', upload, :action => :download, {:target => "_blank"} %>  

controller 
---------- 
return send_file '/data_store/50692.pdf', :type => "application/pdf", :filename => "50692.pdf"