[英]Generate CSV file from rails
我一直在閱讀類似的問題,但是許多答案對我而言已經過時或不夠清晰。
我希望能夠做類似的事情(在控制器動作中):
respond_to do |format|
format.html
format.csv
end
我知道我需要一個諸如action.csv.erb之類的視圖
所以我的問題是:
1)我需要在rails中進行配置以使這種情況大體上發生。
2)如何設置CSV視圖以顯示模型中的一些基本字段?
更新:
因此,我嘗試走逗號的路線,安裝並銷售了gem。
然后根據閱讀的書,我把它扔進了我的模型中(根據我的需要定制):
comma do
user_id 'User'
created_at 'Date'
name 'Name'
end
然后,將其放入索引操作的控件中(根據自述文件):
format.csv { render :csv => MyModel.limited(50) }
然后,當訪問索引(不是CSV格式)時,出現以下ActionController Exception錯誤:
未定義的方法'逗號'
因此,我在Google上進行了搜索,並閱讀了我應該在模型中添加“逗號”的信息。
完成之后,我刷新了(我的本地索引頁面),錯誤更改為:
沒有要加載的此類文件-逗號
因此,在這一點上,我決定顯然不能找到逗號文件。 因此,我將文件從逗號的供應商gem文件夾(從逗號的lib文件夾)復制到rails lib文件夾。 然后,我刷新頁面並發現此錯誤:
未初始化的常量錯誤
然后我幾乎放棄了。
跟蹤中的錯誤是:
/Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:443:在
load_missing_constant' /Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in
const_missing中/Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:92load_missing_constant' /Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in
const_missing中
其他說明,我已經安裝了FasterCSV
希望那是足夠的信息:)
我建議看一下逗號 。 它工作得很好,並允許您在模型級別(而不是視圖級別)處理內容。
看看FasterCSV。
csv_string = FasterCSV.generate do |csv|
cols = ["column one", "column two", "column three"]
csv << cols
@entries.each do |entry|
csv << [entry.column_one, entry.column_two, entry.column_three ]
end
filename = "data-#{Time.now.to_date.to_s}.csv"
end
send_data(csv_string, :type => 'text/csv; charset=utf-8; header=present', :filename => filename)
這很糟糕,但是CSV庫(在1.9中,== FasterCSV)在meta_where上無法很好地發揮作用,所以我這樣做是這樣的:
@customers.collect {|c| lines.push ["#{c.lastname}","#{c.firstname}","#{c.id}","#{c.type}"}
lines = lines.collect {|line| line.join(',')}
csv_string = lines.join("\n")
respond_to do |format|
format.html
format.csv { send_data(csv_string, :filename => "#{@plan.name.camelize}.csv", :type => "text/csv") }
end
難看,但是有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.