find_or_create_by обновление идентификатора - PullRequest
0 голосов
/ 05 августа 2011

Я работаю над проектами RoR.Я мигрирую пользовательскую таблицу.Поскольку новая база данных имеет другую настройку, и я хочу отделить входные данные от личных / настроек, я не импортирую базу данных;Я перенести все атрибуты отдельно.Я хочу сохранить старые идентификаторы пользователя.Когда я использую user = User.new, я могу сделать user.id = migratee.user_id, и я сохраняю user_id.К сожалению, в старой таблице разные пользователи были зарегистрированы с одним и тем же адресом электронной почты (не спрашивайте почему).Конечно, я не хочу этого, поэтому вместо user = User.new я делаю user = User.find_or_create_by_email (migratee.email).Я знаю, что это приведет к некоторым проблемам, поскольку пользователи с одним и тем же адресом электронной почты будут перезаписаны.Это проблема, с которой я буду иметь дело отдельно.Моя проблема заключается в том, что когда я делаю user.id = migratee.user_id после user = User.find_or_create_by_email (migratee.email), старый идентификатор не переносится, а назначается новый автоматически увеличивающийся идентификатор.Кто-нибудь знает, как этого избежать?

С уважением,

Рутгер

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Я не знаю, как выглядит ваш запрос. Если вы делаете INSERT SELECT , вы можете добавить HAVING для фильтрации существующих адресов электронной почты. В противном случае вы можете отправить электронное письмо GROUP BY и получить только одно электронное письмо.

0 голосов
/ 07 августа 2011

Если его отключить, я, вероятно, просто отключу auto_increment в вашем новом столбце id таблицы mysql, пока вы не закончите миграцию, а затем включите его снова или / создадите другой столбец с именем udid в новой таблице базы данных (а затем переименуйте и удалите идентификатор col). Вероятно, более приятные способы сделать это, но это быстро и легко.

...