2011-08-05 3 views
0

저는 RoR 프로젝트에서 일하고 있습니다. 사용자 테이블을 이전하고 있습니다. 새로운 dbase가 다른 설정을 가지고 있고 개인/설정 항목에서 로그인 항목을 분리하고 싶기 때문에 dbase를 가져 오지 않습니다. 모든 속성을 개별적으로 마이그레이션합니다. 이전 사용자 아이디를 유지하고 싶습니다. user.id = migratee.user_id를 할 수있는 user.new를 사용하면 동일한 user_id를 유지합니다. 불행히도 오래된 테이블에서 다른 사용자가 동일한 이메일 주소로 등록 된 이유는 무엇입니까 (이유를 묻지 마십시오). 물론 나는 그렇게하지 않기를 바란다. user = user.new는 user = user.find_or_create_by_email (migratee.email)이 아니라 user.find_or_create_by_email이다. 동일한 이메일 주소를 가진 사용자가 덮어 쓰게 될 것이기 때문에 이것은 몇 가지 문제로 이어질 것입니다. 이것은 내가 별도로 다룰 문제이다. 내 문제는 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 전자 메일을 통해 전자 메일을 하나만받을 수 있습니다.

0

일단 마이그레이션을 마친 다음 다시 켜거나 새 데이터베이스 테이블에서 udid라는 다른 열을 만들 때까지 새 mysql 테이블 ID 열의 auto_increment를 해제하면됩니다. id col의 이름을 변경하고 삭제하십시오. 아마 그것을 할 수있는 더 좋은 방법이지만, 빠르고 쉽습니다.

관련 문제