2009-12-30 6 views
13

레일즈 모델을 사용하여 코드를 단순화하고 불필요한 테이블을 줄이기 위해 단일 모델에 다시 쓰고 있습니다.레일스는 이전 모델을 이전과 함께 제거합니다.

모델 클래스와 해당 테이블을 삭제하는 가장 좋은 방법은 무엇입니까? 과거의 마이그레이션은 여전히 ​​성공하기를 원합니다. 그러나 빈 모델을 계속 놓고 싶지는 않습니다. 이 모델을 참조하는 이전 마이그레이션을 수동으로 삭제 한 다음 수동으로 클래스 파일을 삭제해야합니까?

아무에게도이 작업을 수행하는 가장 좋은 방법에 대한 팁이 있습니까?

답변

2

ruby script/destroy model은 어떨까요? 모델과 마이그레이션을 처리해야합니다.

+0

나중에이 모델에 데이터를 추가하는 마이그레이션은 어떻게됩니까? 스크립트/파괴 검색을하거나 그냥 테이블을 만든 초기 하나를 삭제합니까? – brad

+1

나중에 마이그레이션 할 때 자신의'script/destory migration migration_name'이 필요합니다. 그것에 대해 생각하는 좋은 방법은, 그것은 genarate 명령의 실행 취소입니다. 따라서 동일한 모델을 변경하는 다른 마이그레이션을 검색하지 않습니다. – bobbywilson0

+1

맞습니다. 그렇다면이 모든 것에 대한 최종 답은 script/destroy를 사용할 수 있다는 것입니다.하지만 삭제 된 모델에 대한 참조가 포함 된 마이그레이션도 수동으로 편집해야합니다. 고맙습니다. – brad

2

rails guide에서이 사진을 볼 수 있습니다. 하지만 가능한 경우 모델과 모델에 대한 모든 참조를 삭제해야합니다. 코드베이스에서 죽은 코드를 유지할 필요가 없으므로 나중에 시간을 절약 할 수 있습니다.

2

개발 또는 프로덕션의 진행 정도에 따라 데이터를 제거/백업하기 위해 마이그레이션을 사용하여 모델을 안전하게 마이그레이션 할 수 있습니다. 그런 다음 bobbywilson0는

script/destroy model 

를 사용하여, 제안 또는 당신은 아무것도

script/destroy rspec_model 

을 RSpec에 경우뿐만 아니라 모든 사양 테스트를 제거합니다.

또는 항상 휴지통 폴더로 드래그 할 수 있습니다.

15

완전히 모델의 제거하고자하고 테이블이 할 경우

rails destroy model Name 
+7

이것은'remove_table' 이전을 생성하지는 않지만 대신'create'를 삭제합니다. 그래서 모델은 여전히'schema.rb'에있을 것입니다 ... –

6

문제는 오래된 조금 지금,하지만 난 그냥 한 :

rails destroy scaffold <ModelName> -p 

을 -p 플래그는 "척"출력을 보여 주므로 어떤 결과가 발생하는지 알 수 있습니다. '-p'플래그를 제거하면 결과가 출력과 일치합니다. 이것은 M - V - C 파일 + 테스트 + js 파일 + 원래 마이 그 레이션, 아무 문제의 전체 컬렉션을 청소.

마이그레이션을 직접 편집하고 각각에 여러 단계를 포함하려는 경우 원본 마이그레이션이 db : setup을 손상시킬 수 있으므로 구매자가주의해야합니다. 하나의 작업 == 하나의 마이그레이션 파일을 유지하면 이러한 잠재적 인 위험을 피할 수 있습니다.

9

전체 솔루션입니다.

다음 명령을 실행 :

해야이 보이는 새로운 마이그레이션 파일이 생성됩니다
rails destroy model ModelName 
rails g migration DropTableModelName 

전 :

class DropTableModelName < ActiveRecord::Migration 
    def change 
    drop_table :model_name 
    end 
end 

지금 db:migrate 실행하고 완료합니다.

0

당신은 오히려 수동 기반의 답이 원하는 경우 :

먼저 당신이 원하는 마이그레이션 확인하기 위해 다음 명령을 실행하여 제거 : 당신이 있다면

rake db:migrate:status 

너무 그것에 grep -i 주시기 당신의 명명 체계에 대한 확신.

"모델 이름에 x를 더하십시오"와 유사하게 모델을 기록하십시오. 다음을 사용하여 제거 할 수 있습니다.

rails d migration AddXToModelName 

초기 작성 마이그레이션 이외의 모든 마이그레이션에서이 작업을 수행하십시오. 다음 명령은 초기 생성 이전 및 모델과 관련된 파일을 처리합니다.

rails d model ModelName 
관련 문제