Ho una funzione in un controller che accetta alcune specifiche e genera un rapporto su di esse. Questa funzione user_report viene chiamata in una vista:Difficoltà con send_data in Ruby on Rails in combinazione con il plug-in Spreadsheet
<% = submit_to_remote 'submit-button', "Esporta report in Excel",: url => {: controller =>: reports,: action =>: user_report,: print_state => 'print'}%>
In reports_controller uso il plug-in Spreadsheet per generare un file Excel all'interno della funzione user_report. Voglio usare send_data per inviare il file in streaming all'utente senza prima averlo creato sul server. La ricerca che ho fatto mostra che usare StringIO è la strada da percorrere, come mostrato di seguito. Frustrante, non succede nulla quando chiamo send_data. Il plugin sembra funzionare bene creando un file e salvandolo sul server, ma non fa nulla quando utilizzo send_file, suggerendo che il problema non risiede nel plugin. Ma allora cosa faccio di sbagliato con send_file/send_data?
La funzione stessa si presenta così:
def user_report
if request.post?
unless params[:reports][:userid].blank?
@userid=params[:reports][:userid]
end
if params[:print_state]=='print'
report = Spreadsheet::Workbook.new
info = report.create_worksheet :name => 'User Information'
info.row(1).push 'User ID', @userid
@outfile = "Report_for_#{@userid}.xls"
require 'stringio'
data = StringIO.new ''
report.write data
send_data data.string, :type=>"application/excel", :disposition=>'attachment', :filename => @outfile
end
respond_to do |format|
format.js { }
end
end
fine
Il file di log si legge 2010-10-18 14:13 : 59 INFO - Invio dei dati Report_for_jjohnson.xls ma nessun download inizia nel browser. Sono riuscito a utilizzare send_data su questa app in precedenza, il che è fonte di confusione.
Utilizzo Rails v2.3, Ruby v1.8.7 e Spreadsheet v6.4.1 su spreadsheet.rubyforge.org.
Questa è una vecchia questione ... Ma ho una voglia di notare che 'data.string.force_encoding ('binario')' per me funziona e sembra un po 'meglio. – scaryzet