【问题标题】:how can I seed the ID number into my data when using Rails?使用 Rails 时如何将 ID 号播种到我的数据中?
【发布时间】:2012-10-16 21:36:46
【问题描述】:

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

【问题讨论】:

  • 这是一个受保护的属性。但是,您可以手动设置它 p = Port.new(..); p.id = id; p.保存

标签: ruby-on-rails ruby


【解决方案1】:

您将无法在 create! 调用中设置 id,因为通过这种方式可以防止 id 被批量分配。我相信您可以通过执行以下操作来设置 id:

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

您可能需要考虑在旧系统中为 id 设置一个单独的属性(可能是 old_omnis_id)。我过去曾成功地看到过这项工作。然后您可以使用该属性加入关联,或者,当您添加泊位时,您可以在新系统中通过旧 id 查找港口的 id。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多