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 (这将是如果没有向您提供数据,则准确无误)。