ActiveAdmin:如何在以CSV格式下载所有资源时获得一组特定资源?

时间:2016-08-17 00:03:21

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

AcitveAdmin在索引页面底部提供了一个链接,以多种格式下载所有资源,其中一种格式为CSV。它将获取所有资源,将它们放入CSV文件中,然后将其返回给我们。在我的情况下,我的条件是某些资源可以通过CSV下载,例如:

User.downloadables

但是我无法弄清楚如何将此设置而不是User.all设置为CSV格式?

我查看了文档,除了更改CSV文件的布局外,它没有多少说明。

2 个答案:

答案 0 :(得分:1)

显然,我找不到将特定记录集传递给CSV文件的方法,所以我在ActiveAdmin中为它编写了自定义控制器方法,这就是我完成它的方法:

应用/模型/ user.rb

scope :downloadables, -> { where(status: :downloadable) }

def self.to_csv
  downloadable_users = User.downloadables
  CSV.generate do |csv|
    csv << column_names
    downloadable_users.each do |user|
      csv << user.attributes.values_at(*column_names)
    end
  end
end

应用/管理/ user.rb

首先,我生成了一个集合操作,让我们下载CSV文件:

collection_action :download_csv do
  redirect_to action: :download_csv
end

现在,要在索引页面上建立链接,通过该链接可以下载CSV文件中的记录:

action_item only: :index do
  link_to "Download CSV", download_csv_admin_users_path
end

最后要有一个控制器方法,它实际上会从模型中调用方法,并完成其余的魔法:

controller do
  def download_csv
    respond_to do |format|
      format.html { send_data User.to_csv, filename: "users-#{Data.today}.csv" }
    end
  end
end

就是这样。它正在发挥作用。

答案 1 :(得分:0)

您还可以自定义csv导出以及活动管理员。

ActiveAdmin.register Post do
  csv force_quotes: true, col_sep: ';', column_names: false do
    column :title
    column(:author) { |post| post.author.full_name }
  end
end

干杯