首页 > 解决方案 > Rails 中惯用的 CSV 导出

问题描述

我有一个索引视图,submissions在视图中我@submissions的控制器看起来像这样:

提交控制器

def index 
  @submissions = Submission.submissions_for(user: current_user)
end

从视图中,我想基本上单击一个按钮并传入该列表submissions

我想过像这样添加一条新路线:

<%= link_to "Export", export_submissions_path(submissions: @submissions) %>

但这感觉不太对,因为我需要留在索引页面上。因此,当用户单击export按钮时,他们会留在index页面上,但会创建当前数据的 CSV。所以,这个问题是“如何创建 CSV”,更多的是我如何留在索引页面上并向服务器发送请求以发送 CSV?

标签: ruby-on-railsrubycsv

解决方案


您可以通过单个控制器操作提供不同格式的视图。

class SubmissionsController < ApplicationController
  def index
    @submissions = Submission.submissions_for(user: current_user)

    respond_to do |format|
      format.html
      format.csv { send_data @submissions.to_csv, filename: "users-#{Date.today}.csv" }
  end
end

然后,如果您使用它执行请求,.csv它将提供 csv 而不是视图。

要获得正确的 url,请使用 url_helper,如下所示:

link_to 'CSV Export', submissions_path(format: :csv)

推荐阅读