2011-05-23 65 views
11

在紅寶石下載的文件訪問的頁面建立在軌道上

localhost:3000/download_me 

調用控制器FOO控制器動作download_me。

class foo < ApplicationController 
    def download_me 
    # a file is created here i.e. temp.csv in directory C:\ 
    end 
end 

控制器應創建一個臨時的csv文件,然後在訪問該頁面的瀏覽器中觸發下載。

我該怎麼做?

回答

15

是否有任何理由要將臨時文件存儲在服務器上?如果是這樣的事情就足夠了(使用fastercsv,您需要安裝):

require 'fastercsv' 
FILE_PATH= "root/to/tmpfile.csv" 

FasterCSV.open(FILE_PATH, "w") do |csv| 
    csv << 'add some data' 
end 

send_file file_path, :type=>'text/csv' 

我建議你也許並不需要存儲的文件,但這樣只是更換FasterCSV.open行:

csv = FasterCSV.generate do |csv| 

然後吐出的CSV作爲響應:

send_data csv, :type=> 'text/csv' 
+0

最後我用 'SEND_DATA' 而不是 '由send_file' 這一點。我不知道是否有必要,但是因爲我有一個數據流而不是文件,所以我不必擔心磁盤I/O等。 – jaydel 2011-05-23 16:23:03

+0

這可能是最好的選擇。修改後的參考答案 – Yule 2011-05-23 16:26:49

+4

在大多數情況下,您不需要安裝FasterCSV。在ruby 1.9.2中,默認的'CSV'是FasterCSV,紅寶石1.8.7包含FasterCSV。 – diedthreetimes 2011-05-23 16:31:18