我将一些旧的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号。我猜我可以创建空记录,然后我会用数据更新但是想知道这是否可能。
答案 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。