2011-08-05 6 views
0

私はRoRプロジェクトに取り組んでいます。私はユーザーテーブルを移行しています。新しいdbaseには異なる設定があり、個人用/設定用のものからログイン用のものを分離したいので、私はdbaseをインポートしていません。すべての属性を別々に移行します。私は古いユーザーIDを保持したい。私がuser = User.newを使うと、私はuser.id = migratee.user_idを実行することができ、私は同じuser_idを保持します。残念なことに古いテーブルでは、別のユーザーが同じ電子メールアドレスに登録されている(理由は問いません)。もちろん、私はuser = user.find_or_create_by_email(migratee.email)の代わりにuser.newというユーザーの代わりに私がしていることを望んでいません。これは、同じ電子メールアドレスを持つユーザーが上書きされるため、いくつかの問題につながると私は知っています。これは私が別々に扱う問題です。私の問題は、user.id = migratee.user_idをuser = user.find_or_create_by_email(migratee.email)の後に実行すると、古いIDは移行されず、新しい自動インクリメントIDが割り当てられるということです。誰もそれを避ける方法を知っていますか?find_or_create_by idを更新する

よろしく、

ルトガー

答えて

1

私はあなたのクエリがどのように見えるのか分かりません。 INSERT SELECTを行っている場合は、既存のメールアドレスをフィルタリングするHAVINGを追加できます。それ以外の場合は、GROUP BY電子メールでは1つの電子メールしか取得できません。

0

マイグレーションを終了してから、新しいデータベーステーブルのudidという名前の別の列を作成するまで、新しいmysqlテーブルID列のauto_incrementをオフにするだけですid colの名前を変更して削除します)。おそらくそれを行うより良い方法が、その高速かつ簡単です。

関連する問題