我一直在阅读类似的问题,但许多答案已经过时或不够清楚。
我希望能够做一些事情(在控制器动作中):
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
希望足够的信息:)
答案 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)