我是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
我想我会在模型文件中使用一个循环来首先提取标题,但不知道从哪里开始也不知道它应该如何。请帮帮忙?
答案 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
),则只会出现问题。否则,如果您没有给它一个值,那么数据库中的值就是零(如果您没有提供数据,那将是准确的)。