有没有办法覆盖活动的管理员 csv 部分?如果没有,有没有办法打印不引用属性而是引用内容的列?例子:
在我的模型用户中,我有属性:name,但我不想为每个 user.name 打印一行,我想为每个 User.name 打印一个列,并将它们在下一行与另一个属性关联,名称为“关联” " 像他们的姓氏一样,所以它可能是:
Name Jhon Adam Chuck etc..
LastName Adams Jhons Guy
有没有办法覆盖活动的管理员 csv 部分?如果没有,有没有办法打印不引用属性而是引用内容的列?例子:
在我的模型用户中,我有属性:name,但我不想为每个 user.name 打印一行,我想为每个 User.name 打印一个列,并将它们在下一行与另一个属性关联,名称为“关联” " 像他们的姓氏一样,所以它可能是:
Name Jhon Adam Chuck etc..
LastName Adams Jhons Guy
可以覆盖特定模型的 CSV 视图模板以在生成 CSV 输出之前转置数据。
假设这是针对 User 模型,创建以下视图文件app/views/admin/users/index.csv.erb
。文件位于正确的子目录中很重要。使用默认的 ActiveAdmin 配置,目录是app/views/admin
.
<%-
# This is a modification of the default index.csv.erb template found at:
# https://github.com/gregbell/active_admin/blob/master/app/views/active_admin/resource/index.csv.erb
require 'csv'
default = active_admin_application.csv_options
options = default.merge active_admin_config.csv_builder.options
columns = active_admin_config.csv_builder.columns
# Collect the data in an Array to be transposed.
data = []
data << columns.map(&:name)
collection.each do |resource|
data << columns.map do |column|
call_method_or_proc_on resource, column.data
end
end
csv_output = CSV.generate(options) do |csv|
data.transpose.each do |row|
csv << row
end
end
%>
<%= csv_output.html_safe %>
您现在可以在 ActiveAdmin 用户资源中正常定义 CSV,并且输出将被转置。
ActiveAdmin.register User do
csv do
column :id
column :first_name
column :last_name
end
end
Id,1,2
First Name,Alexis,Charles
Last Name,Carvajal,Maresh