目前,我使用Rails并且能够导出,但是DB中的值有数字格式,我需要将它们翻译成字母数字格式。我有翻译,但我不知道如何在导出到CSV时这样做
这是我目前要导出为CSV的代码片段
def self.to_csv(mycolumns)
CSV.generate() do |csv|
csv << mycolumns
all.each do |ccts|
csv << ccts.attributes.values_at(*mycolumns)
end
end
end
所以我最初的想法是我可以进入每个ccts并编辑它们,但我不知道如何访问哈希中的值并改变它。它仅适用于特定列。例如,如果此表用于水果,其中一个列名称为Name
。如果我想将0041
的值更改为Apple
,但仅在“名称”列中,我只是不确定如何完成此操作。
答案 0 :(得分:0)
csv导出代码非常紧凑,尤其是这一行:
csv << ccts.attributes.values_at(*mycolumns)
这使人们很难想到如何改变它。
首先想一想如果它是一个列,你将如何导出你的值。它可能看起来像:
if column_name == :name
lookup_fruit_name(ccts.name)
else
ccts[column_name]
end
现在您需要数组中ccts
的所有值,因此可以将其发送到csv:
values = mycolums.map do |column_name|
if column_name == :name
lookup_fruit_name(ccts.name)
else
ccts[column_name]
end
end
csv << values
然后将其放在原始导出方法的内部循环中。
如果您认为功能更强大,那么您只需编写一个实例方法来获取您的值并根据列进行转换:
def csv_value_for(column_name)
if column_name == :name
lookup_fruit_name( self.name )
else
self[column_name]
end
end
然后你可以像这样使用它:
csv << mycolumns.map{|col| ccts.csv_value_for(col) }