Rails将CSV对象保存到回形针文件?

时间:2018-03-09 05:15:43

标签: ruby-on-rails csv paperclip

这很奇怪,但我正在使用一个返回CSV::Table对象的API库。

我现在正试图坚持使用回形针。

tempfile = Tempfile.new([report_id, '.csv'])

CSV.open(backup, 'w') do |writer|
  csvtable = APICSVFETCHER.get_report(report_id)
  csvtable.to_a.each do |row|
    writer << row
  end
end
# paperclip method archive
self.archive = File.open(backup)
self.save!

现在这很好,它有效。

但这似乎是一种将CSV对象保存到回形针文件的奇怪方法。

我想做类似的事情:

self.archive = CSV.parse(APICSVFETCHER.get_report(report_id))
self.save!

1 个答案:

答案 0 :(得分:1)

你可以尝试这样的事情。使用具有回形针需要的附加属性和值的StringIO。

class FileFromString < StringIO
  attr_accessor :original_filename, :content_type; 
end

def fake_file report_id

  ff = FileFromString.open(APICSVFETCHER.get_report(report_id).to_csv)  
  ff.original_filename = report_id.to_s
  ff.content_type = 'text/csv'
  ff

end

然后使用它。

self.archive = fake_file(report_id)
self.save!