2010-10-18 6 views
7

मेरे पास एक नियंत्रक में एक फ़ंक्शन है जो कुछ विनिर्देशों को लेता है और उन पर एक रिपोर्ट उत्पन्न करता है। इस समारोह user_report एक दृश्य में कहा जाता है:स्प्रेडशीट प्लग-इन के साथ रेल में रूबी में send_data के साथ कठिनाई

<% = submit_to_remote 'प्रस्तुत बटन', "निर्यात एक्सेल में रिपोर्ट",: यूआरएल => {: नियंत्रक =>: रिपोर्ट,: कार्रवाई =>: user_report,: print_state => 'print'}%>

रिपोर्ट_कंट्रोलर में मैं user_report फ़ंक्शन के भीतर एक्सेल फ़ाइल उत्पन्न करने के लिए स्प्रेडशीट प्लगइन का उपयोग करता हूं। मैं फ़ाइल को सर्वर पर पहले बिना सर्वर पर स्ट्रीम करने के लिए send_data का उपयोग करना चाहता हूं। मैंने जो शोध किया है, वह दिखाता है कि स्ट्रिंगियो का उपयोग करना नीचे जैसा दिखाया गया है। निराशाजनक रूप से, जब मैं send_data को कॉल करता हूं तो कुछ भी नहीं होता है। प्लगइन अच्छी तरह से एक फ़ाइल बनाने और सर्वर पर सहेजने के लिए काम करता है, लेकिन जब मैं send_file का उपयोग करता हूं तो कुछ भी नहीं करता है, यह सुझाव देता है कि समस्या प्लगइन में नहीं है। लेकिन फिर मैं send_file/send_data के साथ क्या गलत कर रहा हूं?

समारोह अपने आप में इस तरह दिखता है:

डीईएफ़ 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 

अंत

लॉग फ़ाइल पढ़ता 2010-10-18 14:13 : 59 जानकारी - डेटा भेजना Report_for_jjohnson.xls लेकिन ब्राउज़र में कोई डाउनलोड शुरू नहीं होता है। मैं पहले इस ऐप पर send_data का उपयोग करने में सफल रहा हूं, जो भ्रमित है।

मैं स्प्रेडशीट.रुब्योरिज.org पर रेल v2.3, रूबी v1.8.7, और स्प्रेडशीट v6.4.1 का उपयोग कर रहा हूं। हालांकि मैं लिख सकते हैं और हटाना चाहते न

send_data data.string.bytes.to_a.pack("C*"), :type=>"application/excel", :disposition=>'attachment', :filename => @outfile 

उत्तर

6

बस लाइन बदल जाते हैं।


# write the file 

book.write "Employee_History_#{ params[:id]}.xls" 

# send the file 

send_file "Employee_History_#{ params[:id]}.xls", :type => "application/vnd.ms-excel", :filename => "data.xls", :stream => false 

# and then delete the file 

File.delete("Employee_History_#{ params[:id]}.xls") 
+3

यह एक पुरानी सवाल यह है कि ... लेकिन मैं सूचना के लिए कि 'data.string.force_encoding ('बाइनरी')' मेरे लिए काम करता है और थोड़ा बेहतर लग रहा है एक से आग्रह करता हूं की है। – scaryzet

0

, लेकिन स्प्रेडशीट के साथ एकमात्र समाधान की तरह लगता है:

send_data data.string, :type=>"application/excel", :disposition=>'attachment', :filename => @outfile 

रहे हैं:

संबंधित मुद्दे