Question

J'ai ce formulaire de coupon

    <%form_for(:download,:download,:url=>{:controller=>"coupons",:action=>"verifycoupon"},:remote=>true) do |f| %>
    <%=text_field :download,:code%>
    <%=f.submit "verify"%>
    <%end%>

et après avoir validé le code sur l'action du contrôleur j'ai une confirmation du genre :

render :update do |page|
    page.alert "OK"
end

Maintenant, je veux envoyer un fichier au navigateur avec le send_file instruction mais rien ne semble se passer

send_file("/path/to/my/file.extension")

et dans le journal je peux voir

"Sent file /path/to/my/file.extension (0.1ms)"

Je me demandais s'il y avait quelque chose comme

render :update do |page|
   page.send_file("/path/to/my/file.extension")
end

 

#### Update #######

l'action de mon contrôleur ressemble à quelque chose comme

def verifycoupon
   code = Code.find(params[:download][:code])
   if code
     if code.is_active?
     render :update do |page|
        page.alert "ok"
     end
       send_file("/path/to/my/file.extension")
     else
       render :update do |page|
          page.alert "this code has already been used"
       end
     end
   else
   render :update do |page|
     page.alert "Code does't exist"
   end
   end
end
Était-ce utile?

La solution

J'ai entendu dire que la solution consiste à envoyer une redirection à un point de fin où l'envoi Send_File de Ajax.

Donc, Ajax Demande -> Serveur -> Réponse -> Redirection -> Client -> Demande qui téléchargée -> Vous restez sur la même page.

def show
  # if javascript, then redirect to file_sender
end

def file_sender
  # Send file from here.
end

Voir ici http://anaphoral.blogspot.com / 2009/03 / sendfile-or-senddata-in-linktoremote.html

Autres conseils

J'ai le même problème, en quelque sorte.

Dans mon voir J'ai eu un link_to taguer avec remote: true.

Le lien visait une action qui produisait un PDF.Le PDF a été généré (avec Prawn et ThinReports) et envoyé, mais la boîte de dialogue de téléchargement ne s'est pas affichée.

J'enlève donc le remote: true et ajoutez un target: '_self', donc ça s'est terminé comme ça (j'utilise haml)

!= link_to image_tag( 'print.png' ) + (I18n.t :buttons)[:comments][:print],
    customer_comment_path(@address_book),
    { target: '_self' }

Et ça a très bien fonctionné.

Je n'ai pas eu à faire le "Requête Ajax -> Serveur -> Réponse -> Redirection -> Client -> demande qui télécharge -> ..." mentionné ci-dessus.

Où appeler sendfile?J'ai une action de contrôleur comme celle-ci :

def show
  # ... skipped initalization of requestedfile
  if File.exists?(requestedfile)
    send_file(requestedfile, :type => "application/pdf", :disposition => "inline"
  end
end

Fonctionne bien pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top