将csv导入rails数据库时的Nil属性

时间:2013-10-03 22:31:46

标签: ruby-on-rails csv

我正在学习Ruby on Rails,在这个过程中,我正在创建一个示例应用程序,它从csv文件中获取数据(涉及芝加哥凶杀案受害者的信息),将数据保存到数据库中,并将此信息显示给用户。 / p>

我从.csv文件的每一行抓取日期,我遇到一个问题,看似随机日期在数据库中显示为'nil',但其他日期将正确导入。我也在抓取Name和Age属性,这些属性正确导入并且没有问题。这只是我遇到问题的日期

这是我正在使用的模型:

class CreateVictims < ActiveRecord::Migration
  def change
    create_table :victims do |t|
      t.string :name
      t.integer :age
      t.date :date

      t.timestamps
    end
  end
end

这是我用来导入数据的rake任务:

require 'csv'
namespace :import_victims_csv do
  task :create_victims => :environment do
    csv_text = File.read('public/seed_data/2013all.csv')
    csv = CSV.parse(csv_text, :headers => true)
    csv.each do |row|
        Victim.create!(date: row[1], age: row[5], name: row[8]) 
    end
  end
end

我会说大约50%的日期会被正确导入,但另外50%会导致'nil'。源.csv文件列出了所有名称的日期。

供参考,以下是我导入的csv文件的链接:CSV

1 个答案:

答案 0 :(得分:1)

查看您的数据集,似乎日期的格式为mm/dd/yyyy,根据此question/answer不再支持该格式的解析。因此,您可以尝试在创建模型之前重新格式化日期:

csv.each do |row|
    formatted_date = Date.strptime row[1], '%m/%d/%Y'
    Victim.create!(date: formatted_date, age: row[5], name: row[8]) 
end