【问题标题】:Rails CSV import with weird format格式怪异的 Rails CSV 导入
【发布时间】:2015-03-05 10:21:05
【问题描述】:

我是 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

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

【问题讨论】:

  • 标题是否与您的数据库相同?
  • @Anthony 是的,他们是

标签: ruby-on-rails ruby csv import


【解决方案1】:

当你创建对象时,你实际上只是传递一个像这样的哈希值:

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),这只会是一个问题,否则,如果您不给它一个值,它只会在您的数据库中为零(如果你没有被提供数据)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多