Rails: CSV.generate和重命名标题

5

我正在将一堆记录导出为CSV文件,像这样:

def self.to_csv
  attributes = %w(full_name first_name last_name created_at status)

  CSV.generate(headers: true) do |csv|
    csv << attributes
    all.each do |lead|
      csv << attributes.map { |attr| lead.send(attr) }
    end
  end
end

但我需要标题读作Full Name而不是full_name。我需要一个哈希来匹配名称,这很好,但我如何在CSV.generate中将新的标题名称写入CSV文件中?

更新查找哈希表。

def lookup
  {
    full_name: 'Full Name', first_name: 'First Name', last_name: 'Last Name', created_at: 'Generation Date', status: 'Status'
  }
end
1个回答

3

调用 attributes 数组的 titalize 方法可以帮助您达到预期的目标。

def self.to_csv
  CSV.generate(headers: true) do |csv|
    csv << lookup.values
    all.each do |lead|
      csv << lookup.keys.map { |attr| lead.send(attr) }
    end
  end
end

真的,但如果我想要的标题不是用相同的措辞,则无法正常工作(因此需要哈希表来查找名称)。 - t56k
如果您正在使用哈希表,则可以直接调用键和值。我会更新我的答案,以便更清楚地表达我的意思。 - coderhs
啊,我明白你的意思了。好修复。谢谢! - t56k
1
注意:在您进行上述修复时,也可以删除attributes数组。 - t56k
没错,忘记了数组。 - coderhs
在这种情况下,headers: true 对输出结果没有任何影响。生成参数似乎是无用的。 - Adeynack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接