ActiveAdmin:如何在以 CSV 格式下载所有资源的同时拥有一组特定的资源?
ActiveAdmin: How to have a specific set of resources while downloading them all in CSV format?
AcitveAdmin在索引页底部提供了一个link可以下载多种格式的所有资源,其中一种格式是CSV。它会获取所有资源,将它们放入 CSV 文件中,然后将其返回给我们。在我的情况下,我有一个条件,可以通过 CSV 下载某些资源,例如:
User.downloadables
但我无法弄清楚如何将此集合而不是 User.all
转换为 CSV 格式?
我查看了文档,除了更改 CSV 文件的布局外,它并没有说太多。
您还可以为活动管理员自定义 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
干杯
显然,我找不到将特定记录集传递到 CSV 文件的方法,所以我在 ActiveAdmin 中为其编写了自定义控制器方法,这就是我完成它的方法:
app/models/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
app/admin/user.rb:
首先,我生成了一个收集操作,可以让我们下载 CSV 文件:
collection_action :download_csv do
redirect_to action: :download_csv
end
现在,要在索引页上有一个 link,通过它可以下载 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
就是这样。正在运行。
AcitveAdmin在索引页底部提供了一个link可以下载多种格式的所有资源,其中一种格式是CSV。它会获取所有资源,将它们放入 CSV 文件中,然后将其返回给我们。在我的情况下,我有一个条件,可以通过 CSV 下载某些资源,例如:
User.downloadables
但我无法弄清楚如何将此集合而不是 User.all
转换为 CSV 格式?
我查看了文档,除了更改 CSV 文件的布局外,它并没有说太多。
您还可以为活动管理员自定义 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
干杯
显然,我找不到将特定记录集传递到 CSV 文件的方法,所以我在 ActiveAdmin 中为其编写了自定义控制器方法,这就是我完成它的方法:
app/models/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
app/admin/user.rb:
首先,我生成了一个收集操作,可以让我们下载 CSV 文件:
collection_action :download_csv do
redirect_to action: :download_csv
end
现在,要在索引页上有一个 link,通过它可以下载 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
就是这样。正在运行。