ActiveAdmin csv部分覆盖?

时间:2013-11-14 18:39:25

标签: csv customization activeadmin

有没有办法覆盖活动的admin csv partial?如果没有,有没有办法打印列引用不属性而不是内容?例如:

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

Name       Jhon     Adam      Chuck   etc..
LastName   Adams    Jhons      Guy

1 个答案:

答案 0 :(得分: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