1

有没有办法覆盖活动的管理员 csv 部分?如果没有,有没有办法打印不引用属性而是引用内容的列?例子:

在我的模型用户中,我有属性:name,但我不想为每个 user.name 打印一行,我想为每个 User.name 打印一个列,并将它们在下一行与另一个属性关联,名称为“关联” " 像他们的姓氏一样,所以它可能是:

Name       Jhon     Adam      Chuck   etc..
LastName   Adams    Jhons      Guy
4

1 回答 1

4

可以覆盖特定模型的 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 用户资源中正常定义 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
于 2013-11-15T16:13:05.227 回答