Ruby on rails 将csv导入Rails时发生日期错误
我正在尝试导入一个csv文件,其中包含美国格式的生日和周年纪念日,即MonthDayYear。我发现这个答案是正确的,但它对我不起作用。如果我不使用转换语言,数据将作为YearDayMonth导入,这是不正确的(并且还会跳过月份大于12的日期。下面是代码:Ruby on rails 将csv导入Rails时发生日期错误,ruby-on-rails,date,csv,Ruby On Rails,Date,Csv,我正在尝试导入一个csv文件,其中包含美国格式的生日和周年纪念日,即MonthDayYear。我发现这个答案是正确的,但它对我不起作用。如果我不使用转换语言,数据将作为YearDayMonth导入,这是不正确的(并且还会跳过月份大于12的日期。下面是代码: class Member < ActiveRecord::Base #this is for importing members from csv file def self.assign_from_row(row) m
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
但是日期是错误的。谢谢您的帮助。
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")
)
虽然我不能说
行[4]
或行[5]
是正确的元素,但在其他地方,您可以使用符号索引到该结构中,但这里的本质是使用切片(…).merge(…)
而不是您拥有的。谢谢。您是对的,行是[:生日]等等。由于一个愚蠢的打字错误,我为此挣扎了很长时间!(:/%m/%d/%Y)
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")
)