如何在Ruby 1.9.2 + Rails3中将表数据导出为CSV文件?

时间:2010-11-17 17:57:19

标签: mysql ruby-on-rails-3 csv export ruby-1.9

我是一名学生,目前正在注册信息技术课程,并且已经获得了一个项目,需要我的团队和我使用Rails 3 + Ruby 1.9.2创建动态表单构建器。此动态表单构建器的一个关键功能是用户可以导出其表单的结果。使用Ruby 1.9+ API中定义的CSV类实现CSV功能并没有太大成功。我在form_results控制器中定义了一个“导出”功能,目前我正在尝试写入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类的实现正常工作,我将能够完成剩余的逻辑而不会出现任何严重问题。任何指导,输入或帮助将不胜感激。

谢谢,

Maz M。

2 个答案:

答案 0 :(得分:2)

您对:method参数的使用不正确。这应该用于指定http动词。文档在这里: http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

我建议在他们查看动态表单的操作中使用respond_to块,并使用format.csv。这允许您使用相同的操作,但仅通过调用附加到URL的.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 :(得分:1)

您应该参考this链接。此Railscast剧集解释了以CSV格式或XLS格式导出数据。您也可以参考this链接。