2010-11-17 39 views
1

我是一名學生,目前已經註冊了一個信息技術課程,並且獲得了一個項目,要求我的團隊和我使用Rails 3 + Ruby 1.9.2創建一個動態表單構建器。這個動態表單構建器的一個關鍵特性是用戶可以導出表單的結果。使用Ruby 1.9+ API中定義的CSV類來實現CSV功能並沒有太多成功。我在form_results控制器中定義了一個「導出」函數,目前我只是想寫入一個CSV文件。我導出功能如下:如何在Ruby 1.9.2 + Rails3中將表格數據導出爲CSV文件?

def export 
CSV.open("/public/results/results.csv", "wb") do |csv| 
    csv << ["sample", "data"] 
end 
end 

並在視圖,我用鏈接的功能:

<%= link_to 'Download CSV', form_form_results_path(@form), :method => :export %> 

我覺得,如果我能得到CSV類的正常實施,我將能夠在沒有任何嚴重問題的情況下完成其餘的邏輯。任何指導,輸入或幫助將不勝感激。

感謝,

馬茲M.

回答

2

您使用:method特性參數的不正確。這應該用來指定http動詞。文檔瀏覽: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

我建議在他們正在查看的動態表單的動作使用respond_to塊,並使用format.csv。這可以讓你僅僅通過調用行動網址的.csv在您的表單模型添加到URL

respond_to do |format| 
    format.html 
    format.csv { render :text => @dynamic_form.to_csv} #this will return txt in browser 
    #format.csv { render :csv => @dynamic_form.to_csv} #with mime type (should prompt browser download) 
end 

然後使用相同的動作,但呈現不同格式的結果,你可以創建一個to_csv DEF這將渲染csv並將其作爲字符串返回。你真的不應該在你的控制器中放置任何這樣的邏輯。控制器用於創建實例變量(創建邏輯應在模型中完成)並轉發到適當的視圖。該模型應該包含你的大部分邏輯。谷歌「瘦身控制器,肥胖模型」的更多信息。

def to_csv 
    csv = some_logic_here_to_create_csv_string 
    csv 
end 

你的link_to調用可能會是這樣的(只是寫這篇關閉我的頭頂。我不記得,如果這是正確的語法):

<%= link_to 'Download CSV', form_form_results_path(@form, :format=>:csv) %> 
1

你應該參考this鏈接。這Railscast插曲解釋導出CSV格式或XLS格式的數據。您也可以參考this鏈接。

相關問題