Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将csv导入Rails时发生日期错误_Ruby On Rails_Date_Csv - Fatal编程技术网

Ruby on rails 将csv导入Rails时发生日期错误

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

我正在尝试导入一个csv文件,其中包含美国格式的生日和周年纪念日,即MonthDayYear。我发现这个答案是正确的,但它对我不起作用。如果我不使用转换语言,数据将作为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

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

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")
)