【问题标题】:Use a custom query when generating CSV in Activeadmin在 Activeadmin 中生成 CSV 时使用自定义查询
【发布时间】:2016-02-17 08:08:37
【问题描述】:

我有额外的计算列(基于联接)我想包含在我的 CSV 中。

如果我为每条记录单独打开并计算它

csv do
  column :complicated_calculation {  |r| r.calculate_things }
end

生成数千条记录需要很长时间。

我需要在生成 CSV 时自定义 SELECT 查询,然后使用该查询中的列。我该怎么做?

【问题讨论】:

    标签: csv activeadmin


    【解决方案1】:

    Customizing resource retrieval 在文档中向您展示了如何在不重写整个 csv 构建器的情况下:修改 scoped_collection

    因此,如果您的查询在模型中很好地等待:

    class Person < ActiveRecord::Base
      def self.with_calculation
        select("people.*, (mumbo + jumbo * fumbo) "\
          "AS complicated_calculation") # notice we name the attribute here
        .joins("LEFT JOIN games ON person_id = people.id")
        .group("people.id")
      end
    end
    

    通过您的计算,您可以做到:

      controller do
        def scoped_collection
          super.with_calculation
        end
      end
    

    然后您的 CSV 将免费拥有该属性:

    csv do
      column :complicated_calculation
    end
    

    【讨论】:

    • 这将改变索引操作的数据列表。只能自定义 csv 下载操作吗?
    • @Jonathan.Allard 有没有办法通过 CSV 的 scoped_collection 自定义不影响 index table
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多