【问题标题】:How to save a hash to a Sequel DB?如何将哈希保存到 Sequel DB?
【发布时间】:2015-04-28 12:30:49
【问题描述】:

在我的种子目录中,我有两个文件:seed.rbfile.csv。我解析并清理了 CSV 文件。然后我选择了我想要的信息(第 1、2、3 行等)并将其放入哈希中:

require 'csv'
data = {}
CSV.foreach("file.csv") do |line|
  data[line[1]] = {:address => line[2].to_s, :city => line[3].to_s, :state => line[4].to_s, :zipcode => line[5].to_s, :phone => line[6].to_s}
end

我想将这些数据(目前在散列中)保存到我的 Sequel 数据库中,使用我创建的名为 town.rb 的模型。在我的模型中,我所写的只是:

class Town < Sequel::Model
   #put conditions here
end

注意:在与此模型关联的迁移中,我写了以下内容:

Sequel.migration do
  up do
    create_table(:towns) do
      primary_key :__id__

      String :name, :null => false
      String :address
      String :city
      String :state
      String :zipcode
      String :phone

    end
  end

  down do
    drop_table(:towns)
  end
end

所以现在回到我的seed.rb 文件中,我在编写代码之后尝试完成将数据保存到我的种子文件中:

data do |key, record|
  c = Town.new #LINE 36
  c.name = key
  c.address = record[:address]
  c.city = record[:city]
  c.state = record[:state]
  c.zipcode = record[:zipcode]
  c.phone = record[:phone]
  c.save
end

但是,我不断收到一条错误消息:

seed.rb:36:in `block in <top (required)>': uninitialized constant Town (NameError)
    seed.rb:35:in `each'
    seed.rb:35:in `<top (required)>'
    from -e:1:in `load'
    from -e:1:in `<main>'

如何将此哈希保存到我的数据库中而不会出错?任何帮助都会令人惊叹!谢谢!

【问题讨论】:

  • 为什么Town 在college.rb 中?可能是您在自动加载方面遇到了一些问题。将文件重命名为 town.rb
  • 如果你不使用自动加载器,你可能需要require你所有的模型文件。
  • 我尝试要求我的模型,但它给了我无法加载此类文件的错误
  • 将主键列命名为__id__ 可能是个坏主意。如果您可以控制架构,则在使用 Sequel 时应尽量避免在列名中使用双下划线。

标签: ruby database csv hash sequel


【解决方案1】:

看起来Town 类在seeds.rb 运行时根本没有加载。

如果@SergioTulentsev 的评论无效,您可以发布您的种子文件吗?特别是发生错误的行36

我猜你在36 线上引用了Town 类,该类未加载(或类似的东西),导致:

uninitialized constant Town (NameError)

【讨论】:

  • 我的帖子中有拼写错误。请在我添加信息以澄清时参考。很抱歉!
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2012-04-20
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多