2

我正在通过文本文件将旧 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 号也没有传入。我猜我可以创建空记录,然后用数据更新,但想知道这是否是可能的。

4

1 回答 1

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。

于 2012-10-16T21:50:43.877 回答