在ruby 1.9和CSV :: Writer中编写csv

我有一个与ruby 1.87一起工作的代码,但不适用于ruby 1.9。 它说CSV :: Writer是未声明的,但它仍然是rdoc的一部分。 在fastcsv合并之后,csv api是否发生了变化?

我的代码:

require 'csv' def self.export_csv file_name = File.join(RAILS_ROOT, 'public','csv',"#{start_date_f}_#{end_date_f}.csv") return file_name if File.exist?(file_name) @results = find(:all) header_row = [] outfile = File.open(file_name, 'wb') CSV::Writer.generate(outfile) do |csv| header_row = ['gateway_id','created', 'gateway_status_id', 'panel_id', 'panel_status','volts_out', 'amps_out', 'temp','aid' ,'sid', 'pisid'] csv << header_row end end 

我收到的错误:NameError:未初始化的常量CSV :: Writer

请注意,需要’csv’。 我在我的控制台中尝试它,当我执行require’csv’时,它可以工作,但是一旦我调用CSV :: Writer,我就会收到该错误。 这段代码适用于ruby 1.87,因此它让我认为它是一个ruby 1.9 csv问题,因为它与fasterCSV合并。

csv库仍然存在,但CSV :: Writer不存在。 根据1.9.0中的csv.rb:

 # I'm sure I'll miss something, but I'll try to mention most of the major # differences I am aware of, to help others quickly get up to speed: # # === CSV Parsing # # * This parser is m17n aware. See CSV for full details. # * This library has a stricter parser and will throw MalformedCSVErrors on # problematic data. # * This library has a less liberal idea of a line ending than CSV. What you # set as the :row_sep is law. It can auto-detect your line endings # though. # * The old library returned empty lines as [nil]. This library calls # them []. # * This library has a much faster parser. # # === Interface # # * CSV now uses Hash-style parameters to set options. # * CSV no longer has generate_row() or parse_row(). # * The old CSV's Reader and Writer classes have been dropped. # * CSV::open() is now more like Ruby's open(). # * CSV objects now support most standard IO methods. # * CSV now has a new() method used to wrap objects like String and IO for # reading and writing. # * CSV::generate() is different from the old method. # * CSV no longer supports partial reads. It works line-by-line. # * CSV no longer allows the instance methods to override the separators for # performance reasons. They must be set in the constructor. 

稍后,有一个如何逐行编写的例子(以及其他写作方法):

 # === To a File # # CSV.open("path/to/file.csv", "wb") do |csv| # csv << ["row", "of", "CSV", "data"] # csv << ["another", "row"] # # ... # end