有没有办法覆盖活动的admin csv partial?如果没有,有没有办法打印列引用不属性而不是内容?例如:
在我的模型中用户我有属性:name但是我不想为每个user.name打印一行,我想为每个User.name打印一个列,并在下一行中将它们与另一个属性关联起来是"关联"与他们的last_name一样,所以它可能像:
Name Jhon Adam Chuck etc..
LastName Adams Jhons Guy
答案 0 :(得分:4)
在生成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