Ruby On Rails: send_file a través de jquery / ajax request

Tengo problemas para download files del server de mis rails a través de ajax:

Tengo una acción de presentación en mi controller de descargas que llama a send_file si un parámetro se pasa a la acción show.

Luego tengo una página donde hay un menu desplegable de select que muestra una list de files que están en el server. Cuando selecciono un valor y hago clic en el button de descarga, emite una request ajax que envía una request GET que procesa mi controller de descargas.

Al mirar los loggings de mi server, parece que la request de Ajax está funcionando y dice:

 Started GET "/download?file=test.txt" for 127.0.0.1 at 2012-07-19 15:13:41 -0700 Processing by DownloadsController#show as HTML Parameters: {"file"=>"test.txt"} Sent file /Users/Admin/Documents/rails_projects/test/public/data/test.txt (0.1ms) Completed 200 OK in 0ms (ActiveRecord: 0.0ms) 

Sin embargo, nada está realmente descargado. Cuando realmente visito la página del show manualmente, el file se descarga. ¿Qué estoy haciendo mal?

Javascript

  <script type="text/javascript"> $(function() { $('#button').click(function() { var s = $("select#dropdown_select").val(); $.ajax({ type: 'GET', url: 'http://localhost:3000/download?file=' + s, dataType: "HTML" }); }) }); </script> 

Controlador de descargas

 def show filename = params[:dl] if(filename.nil? == false) path = Rails.root.join('public/data', filename) send_file path, :x_sendfile => true end end 

Tuve el mismo problema, bueno, pero, en lugar de usar la function de clic de JS, utilicé la label de link Rails.

Originalmente, en mi opinión , tenía un link_to tag with remote: true (que produce la llamada ajax)

El enlace tenía como objective una acción que producía un PDF. El PDF se generó (con gambas y thinreports) y se envió, pero el dialog de descarga no apareció.

Así que eliminé el remote: true y agregué un target: '_self' , así que terminó así (estoy usando haml)

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

Y funcionó bien.

¿Por qué no intentas reescribir el código usando las tags de link de Rail?