Rails CSV 格式奇怪的导入
Rails CSV import with weird format
我是 RoR 的新手
我知道如何将 CSV 文件上传到我的数据库中,但是我拥有的 CSV 文件格式很奇怪,而不是 header 列中的 headers,header 前面的数据是这样的:
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
我想我会在模型文件中使用循环来首先提取 header 但不知道从哪里开始也不知道它应该是什么样子。请帮忙?
当您创建对象时,您实际上只是传递了一个散列值,如下所示:
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
),这只会是一个问题,否则,如果您不给它一个值,它在您的数据库中将只是 nil (这将是如果没有向您提供数据,则准确无误)。
我是 RoR 的新手
我知道如何将 CSV 文件上传到我的数据库中,但是我拥有的 CSV 文件格式很奇怪,而不是 header 列中的 headers,header 前面的数据是这样的:
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
我想我会在模型文件中使用循环来首先提取 header 但不知道从哪里开始也不知道它应该是什么样子。请帮忙?
当您创建对象时,您实际上只是传递了一个散列值,如下所示:
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
),这只会是一个问题,否则,如果您不给它一个值,它在您的数据库中将只是 nil (这将是如果没有向您提供数据,则准确无误)。