【问题标题】:Date error importing csv into Rails将csv导入Rails的日期错误
【发布时间】:2016-01-30 05:24:53
【问题描述】:

我正在尝试导入包含美国格式的生日和纪念日的 csv 文件,即 MonthDayYear。我在 SO 上找到了这个答案,但它对我不起作用。如果我不使用转换语言,则数据导入为 YearDayMonth,这是不正确的(并且还会跳过月份大于 12 的日期。代码如下:

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 at /members/import”

同样,如果我删除

,代码就可以导入
=> DateTime.strip ... /%d")

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

【问题讨论】:

    标签: ruby-on-rails date csv


    【解决方案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(...) 而不是你拥有的。

    【讨论】:

    • 谢谢。你是对的,该行是 row[:birthday] 等。由于一个愚蠢的错字,我为此苦苦挣扎了很长时间! (:/%m/%d/%Y")
    猜你喜欢
    • 2017-03-18
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多