【发布时间】:2016-02-17 08:08:37
【问题描述】:
我有额外的计算列(基于联接)我想包含在我的 CSV 中。
如果我为每条记录单独打开并计算它
csv do
column :complicated_calculation { |r| r.calculate_things }
end
生成数千条记录需要很长时间。
我需要在生成 CSV 时自定义 SELECT 查询,然后使用该查询中的列。我该怎么做?
【问题讨论】:
标签: csv activeadmin
我有额外的计算列(基于联接)我想包含在我的 CSV 中。
如果我为每条记录单独打开并计算它
csv do
column :complicated_calculation { |r| r.calculate_things }
end
生成数千条记录需要很长时间。
我需要在生成 CSV 时自定义 SELECT 查询,然后使用该查询中的列。我该怎么做?
【问题讨论】:
标签: csv activeadmin
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
【讨论】:
scoped_collection 自定义不影响 index table?