从rails生成CSV文件

时间:2010-03-18 19:17:48

标签: ruby-on-rails csv

我一直在阅读类似的问题,但许多答案已经过时或不够清楚。

我希望能够做一些事情(在控制器动作中):

respond_to do |format|
  format.html
  format.csv
end

我知道我需要一个像action.csv.erb

这样的视图

所以我的问题是:

1)我需要在rails中配置什么才能允许这种情况发生。

2)如何设置CSV视图以显示模型中的一些基本字段?

更新

所以我试图走逗号的路线,我安装并出售了宝石。

然后根据读到的我,我把它扔进我的模型(根据我的需要定制):

comma do

user_id 'User'
created_at 'Date'
name 'Name'
end

然后我把它扔在索引动作的控件中(根据自述文件):

  format.csv { render :csv => MyModel.limited(50) }

然后,当访问索引(不是CSV格式)时,我收到以下ActionController异常错误:

  

的未定义方法`逗号'      

然后我用Google搜索,我读到我应该在我的模型中加上'逗号'。

执行此操作后,我刷新了(我的本地索引页面),错误更改为:

  

没有要加载的文件 - 逗号

所以在这一点上,我决定显然不能找到逗号文件。所以我将comma的vendored gem文件夹中的文件从comma的lib文件夹复制到rails lib文件夹。然后我刷新了页面并找到了这个错误:

  

未初始化的常量错误

然后我几乎放弃了。

  

跟踪错误是:

     

/Users/elliot/.gem/ruby/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:443:in   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:92:in   `const_missing'

其他说明,我已经安装了FasterCSV

希望足够的信息:)

4 个答案:

答案 0 :(得分:11)

我建议看看comma。它工作得很好,允许你处理模型级别的东西,而不是视图级别。

答案 1 :(得分:6)

看看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)  

答案 2 :(得分:3)

这很糟糕,但是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

这很难看,但有效。

答案 3 :(得分:0)

看看CSV Shaper。

https://github.com/paulspringett/csv_shaper

它有一个不错的DSL,并且与Rails模型的效果非常好。