CSV上传期间运行方法

时间:2013-08-27 22:04:07

标签: ruby-on-rails csv unidecoder

我在下面有一个简单的CSV上传器,它逐行显示并创建一个新记录(事件)。我还使用了unidecoder gem,并希望在CSV上传器创建的每个记录中的字段(描述字段)上调用to_ascii方法。听起来应该很简单,但我不熟悉迭代CSV文件。

上传者:

def self.import(file)
  CSV.foreach(file.path, headers: true, encoding: "windows-1252:utf-8") do |row|
    Event.create! row.to_hash
  end
end

正确实施此方法:

def self.import(file)
  CSV.foreach(file.path, headers: true, encoding: "windows-1252:utf-8") do |row|
    description = row[2]
    row[2] = description.to_ascii

    Event.create! row.to_hash
  end
end

谢谢!

1 个答案:

答案 0 :(得分:2)

试试这个:

CSV.foreach(file.path, headers: true, encoding: "windows-1252:utf-8") do |row|
    unless row[1].blank?
      description = row[1] # Change 1 for the correct column
      row[1] = description.to_ascii
    end

    Event.create! row
end

如果描述不是空白(空),请提取并更新值(描述),然后保存。

row是逗号分隔值的数组,例如name, description, address之类的CSV文件,row[1]具有描述值。