2016-01-29 87 views
2

我想导入一个csv文件,有美国格式,即MonthDayYear生日和纪念日。我在SO上找到了这个答案,但它对我没有用。如果我离开关转换语言,将数据导入为YearDayMonth,这是不正确的(也跳过日期在一个月> 12下面的代码:导入csv到Rails的日期错误

class Member < ActiveRecord::Base 
    #this is for importing members from csv file 
    def self.assign_from_row(row) 
    member = Member.where(member_id: row[:member_id]).first_or_initialize 
    member.assign_attributes row.to_hash.slice(
     :member_id, :last_name, :first_name, :email, 
     :anniversary => DateTime.strptime(row[4], "%m/$d/%Y").strftime("%Y/%m/%d"), 
     :birthday => DateTime.strptime(row[5], "%m/$d/%Y").strftime("%Y/%m/%d") 
    ) 
    member 
    end 
    end 

的错误是“引发ArgumentError在/会员/进口“

同样,代码工作尽可能进口,如果我删除

=> DateTime.strip ... /%d") 

但日期是错误的。感谢您的帮助。

回答

1

slice不工作,你有它的方式,你不能提供一个哈希和价值,并期望它在合并这些,你想要更多的东西是这样的:

member.assign_attributes row.to_hash.slice(
    :member_id, 
    :last_name, 
    :first_name, 
    :email 
).merge(
    :anniversary => DateTime.strptime(row[4], "%m/$d/%Y").strftime("%Y/%m/%d"), 
    :birthday => DateTime.strptime(row[5], "%m/$d/%Y").strftime("%Y/%m/%d") 
) 

虽然,我不能说是否row[4]row[5]是正确的元素,在其他地方使用符号索引到该结构中,但这里的本质是使用slice(...).merge(...)而不是您拥有的元素。

+1

谢谢。你是对的,排是[[生日]]等行。我因为一个愚蠢的错字而苦苦挣扎了很长时间! (:/%米/%d /%Y“) –