在使用Rails时如何将ID号添加到我的数据中?

时间:2012-10-16 21:36:46

标签: ruby-on-rails ruby

我将一些旧的Omnis 7数据库中的数据通过文本文件导入Rails。我正在为此目的使用文本文件,并使用db:seed将其移植到。

在我的seeds.rb文件中,我有:

Port.delete_all
File.open("db_ports.txt", "r") do |ports|
  ports.read.each_line do |port|
    id, name, un_locode, bunker_surcharge, launch_tariff  = port.chomp.split("|")
    Port.create!(:id => id, :name => name, :un_locode => un_locode, :bunker_surcharge => bunker_surcharge, :launch_tariff => launch_tariff)
  end
end

我希望ID号是在另一个数据库中分配的ID号,因为Berths有一个外键,它看起来像Ports,我需要那些相互匹配。

然而,当我上次导入我的数据时,这没有按计划运行,并且没有传入ID号。我猜我可以创建空记录,然后我会用数据更新但是想知道这是否可能。

1 个答案:

答案 0 :(得分:7)

您将无法在create!调用中设置ID,因为ID会以这种方式受到群发分配的保护。我相信你可以通过以下方式设置id:

port = Port.new(:name => name, :un_locode => un_locode, ... )
port.id = id
port.save!

您可能希望考虑在旧系统中为id设置单独的属性(可能是old_omnis_id)。我以前见过这项工作。然后,您可以使用此属性在关联中加入,或者在添加泊位时,您可以通过旧ID在新系统中查找端口的ID。