2

古いOmnis7データベースからテキストファイルを介して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番号が渡されませんでした。空のレコードを作成してデータで更新できると思いますが、これが可能。

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 に答える