Rails CSV导入与奇怪的格式

时间:2015-01-07 13:44:55

标签: ruby-on-rails ruby csv import

我是RoR的新手

我知道如何将CSV文件上传到我的数据库中,但我所拥有的CSV文件格式奇怪,而不是标题栏中的标题,标题位于数据前面,如下所示:

Name:Peanut,Age:17,State:NY
Name:Donkey,Age:23,State:NY
Name:Flower,Age:18,State:NY

另一个问题是某些行没有所有数据,因此不是这样的顺序:

Name:Peanut,Age:17,State:NY
Name:Donkey,State:NY
Age:18,State:NY

我想我会在模型文件中使用一个循环来首先提取标题,但不知道从哪里开始也不知道它应该如何。请帮帮忙?

1 个答案:

答案 0 :(得分:2)

当你创建对象时,你实际上只传递了这样的值的散列:

User.create(name: "Some name", age: 18)

您可以使用这样的ruby脚本:

require 'CSV'
CSV.foreach('users.csv') do |line|
  user = line.each_with_object({}) do |val, hash|
    vals = val.split(':')
    hash[vals.first] = vals.last
  end
  User.create(user)
end

我只是构建一个如下所示的值哈希值:

{"Name"=>"Peanut", "Age"=>"17", "State"=>"NY"}
{"Name"=>"Donkey", "Age"=>"23", "State"=>"NY"}
{"Name"=>"Flower", "Age"=>"18", "State"=>"NY"}

我将这些值发送到User.create来电。关于您丢失的数据,如果您对模型进行了验证(例如validates :age, presence: true),则只会出现问题。否则,如果您没有给它一个值,那么数据库中的值就是零(如果您没有提供数据,那将是准确的)。