生成的CSV中的引号

时间:2014-04-08 14:28:19

标签: ruby-on-rails ruby csv

我正在我的模型中生成CSV,以文件形式回复。

def self.to_csv
    CSV.generate(col_sep: "\;") do |csv|
      csv << ["1", "2", "3", "4", "5"]
      all.each do |record|
        csv << [record.date.to_s, record.text, (MessageCharacter.find_by_id(record.message_character_id).try(:name) || ""), record.commentable.name, record.user.name].map{|e| "#{e}"}
      end
    end
  end

因此,我希望用引号括起所有内容,例如:

"1";"2";"3";"4";"5"
"value1";"value2";"value3";"value4";"value5"

但我得到的任何值都没有引号(如果在输入数据中我不用引号括起来),或者如果我用额外的引号括起来,我每个值都有3个引号!那么如何以上面显示的方式包装所有值?

1 个答案:

答案 0 :(得分:4)

force_quotes?()开始,您可以使用force_quotes选项,如下所示:

def self.to_csv
    CSV.generate(col_sep: "\;", force_quotes: true) do |csv|
      csv << ["1", "2", "3", "4", "5"]
      all.each do |record|
        csv << [record.date.to_s, record.text, (MessageCharacter.find_by_id(record.message_character_id).try(:name) || ""), record.commentable.name, record.user.name].map{|e| "#{e}"}
      end
    end
  end

您也可以指定与quote_char: '"'一起使用的引号,但双引号仍然是标准。