我的应用程序的几个对象需要导出为CSV。 基于#362 Exporting CSV and Excel,我将以下函数添加到模型中:
### private functions definitions
private
def self.to_csv
CSV.generate(:col_sep => ";") do |csv| #Could accept a separator option
csv << column_names
all.each do |column|
csv << column.attributes.values_at(*column_names)
end
end
end
我如何在模型级别将此功能重用于其他模型?
感谢。
答案 0 :(得分:2)
您可以使用常用方法定义模块:
module CsvHelper
def to_csv
CSV.generate(:col_sep => ";") do |csv| #Could accept a separator option
csv << column_names
all.each do |column|
csv << column.attributes.values_at(*column_names)
end
end
end
end
现在在课堂上使用:
extend CsvHelper
P.S。类的范围不会随着类的范围内的private
而改变。
如果你真的想拥有私人单身人士方法,你可以做以下事情:
class Foo
class << self
private
def bar
end
end
end
现在bar
方法是私有的。
答案 1 :(得分:1)
如果此应用程序不仅仅是一个玩具项目,我建议使用类似逗号gem https://github.com/comma-csv/comma
的内容如果您急切加载所有关联并且没有任何相关查询,那么这对于数百个的导出很有效,对于几千行应该没问题。
如果您需要担心生成包含数十万或数百万行的文件,您应该考虑在后台作业中运行这些文件,或者,如果您使用像postgres这样的数据库,则可以利用postgres的内置CSV生成这非常快。有一个很好的宝石,使这个过程非常轻松:https://github.com/diogob/postgres-copy