2013-08-27 25 views
0

我有一个简单的CSV上传器,下面是逐行并创建一个新的记录(事件)。我还使用了unidecoder gem,并且想要在CSV上传器创建的每个记录中的字段(描述字段)上调用to_ascii方法。这听起来应该很简单,但我不熟悉遍历CSV文件。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 

谢谢!

回答

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]具有描述的值。

+0

奇数,它表示'to_ascii'不是一种方法。我从来没有真正在模型中使用它,而是在控制器中使用它。我对Rails相当陌生,所以不知道如何继续。有什么想法吗? – Devan

+0

找不到'unidecoder'的宝石。什么是错误输出? – cortex

+0

“NoMethodError at/events/import undefined method to_ascii for nil:NilClass” 这是Github for unidecoder gem:https://github.com/norman/unidecoder – Devan