特定のモデルの CSV のビュー テンプレートをオーバーライドして、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 リソース
ActiveAdmin User リソースで 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