【问题标题】:How to export table data as CSV file in Ruby 1.9.2 + Rails3?如何在 Ruby 1.9.2 + Rails3 中将表数据导出为 CSV 文件?
【发布时间】:2010-11-17 17:57:18
【问题描述】:

我是一名学生,目前就读于信息技术课程,并获得了一个项目,该项目需要我和我的团队使用 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 类的实现正常工作,我将能够完成其余的逻辑而不会出现任何严重问题。任何指导、意见或帮助将不胜感激。

谢谢,

马兹 M.

【问题讨论】:

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


    【解决方案1】:

    您对: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) %>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-19
        • 2011-11-01
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 2017-02-02
        • 1970-01-01
        相关资源
        最近更新 更多