2016-06-06 4 views
0

테이블 이름을 바꾸기 위해 레일 이동을하고 있는데, 외래 키의 이름을 자동으로 바꾸고 싶습니다. 예 : 내가 모델이 마이그레이션을 형성하고보고받을 생각했습니다activerecord에서 외래 키의 이름을 자동으로 바꿉니다.

def change 
    rename_column :posts, :user_id, :person_id 
end 

처럼 자동으로 마이그레이션을 생성하고 싶은 User 많은 posts을 가지고 있으며, 나는 Person

def change 
    rename_table :users, :people 
end 

User의 이름을 변경하고있어 그것의 has_many 모형에, 예를 들면 this answer에 설명되어 있습니다. 더 간단한 방법이 있습니까?

+0

나는 그것이 불가능하다고 생각합니다. 오류가 발생하기 쉽습니다. – pmichna

+2

나는이 변화를 좋아한다. 왜 마약 딜러 같은 소프트웨어 개발자가 고객 * 사용자 *에게 전화하는 데 사용되는지 이해하지 못했습니다. – spickermann

답변

0

레일스가 외래 키의 이름을 바꾸겠다고 제안했지만 위와 같은 방식으로 외래 키의 이름을 바꾸는 방법을 찾지 못했을 때 좋습니다. 당신은 그러나 users를 참조하는 각 테이블에 대해 다음과 같은 작업을 수행 할 수

remove_foreign_key :posts, :users 
rename_column  :posts, :user_id, :person_id 
add_foreign_key :posts, :people 

이것은 당신이 이미 가지고있는 참조를 유지합니다.

remove_foreign_key은 잊지 않으면 이름을 복수화하지 않습니다 (일부 생성자는 복수형 대신 단수를 사용하는 경우 경고합니다).

관련 문제