在单个视图中导出多个CSV导出按钮(即两个或更多)

时间:2016-08-21 17:51:50

标签: ruby-on-rails csv export-to-csv

我已经关注了Railscasts和类似的GoRails视频 - 搜索SO [rails] [csv] export无济于事。有一个类似但难以理解的问题/答案称为Two Export Buttons to CSV in Rails。我可以添加一个按钮将我的表记录导出到csv(已选择此按钮的所有记录)。

我想在我的视图页面添加第二个(或第n个)按钮,以导出表记录的子集...例如。 Event.where(country: some_country)除了导出模型的所有记录的当前(工作正常)按钮/下载之外。我认为这将是csv导出的常见用法。

这就是我所拥有的,倒退的工作:

事件索引视图:我有一个下载按钮导出为CSV(为字形图像添加了辅助代码)

<%= link_to glyph(:save), "events.csv", class: "btn btn-success" %>

如果我想要第二个动作,我需要一条与events.csv不同的路线,对吗?所以,我尝试了一个新的按钮,将“events.csv”更改为@events_us.csv

事件控制器:定义了'what'并作为所有记录回复(使用ransack和will_paginate gems):

def index
  @search = Event.ransack(params[:q])
  @events = @search.result.paginate(:page => params[:page], :per_page => 50)

  @events_all = Event.all

  respond_to do |format|
    format.html # need to have html
    format.csv { send_data @events_all.to_csv, filename: "Events-#{Date.today}.csv" }
  end
end

我应该在format.csv中添加第二个respond_to do...吗?尝试过(即定义了一个不同的实例变量,如@events_us = Event.where(country: "US"),但无济于事。虽然有两个format.csv s似乎很奇怪。而且,我得到No route matches [GET] "/@events_us.csv"

我可能不需要说太多,因为我在这一方面都失去了各种各样的东西。

事件模型:使用all范围,csv库等来组织csv:

def self.to_csv
    column_names = Event.column_names.map(&:to_s) - %w[id created_at updated_at]

    CSV.generate(headers: true) do |csv|
        csv << column_names
        all.each do |record|
            csv << record.attributes.values_at(*column_names)
        end
    end
end

如果我在控制器中有第二个respond_to动作,我可以使用第二种方法,如self.to_csv_us吗?

def self.to_csv_us
    column_names = Event.column_names.map(&:to_s) - %w[id created_at updated_at]

    CSV.generate(headers: true) do |csv|
        csv << column_names
        @events_us.each do |record|
            csv << record.attributes.values_at(*column_names)
        end
    end
end

0 个答案:

没有答案