AcitveAdmin在索引页面底部提供了一个链接,以多种格式下载所有资源,其中一种格式为CSV。它将获取所有资源,将它们放入CSV文件中,然后将其返回给我们。在我的情况下,我的条件是某些资源可以通过CSV下载,例如:
User.downloadables
但是我无法弄清楚如何将此设置而不是User.all
设置为CSV格式?
我查看了文档,除了更改CSV文件的布局外,它没有多少说明。
答案 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
干杯