2015-02-02 2 views
0

모델을 리메이크하려면 rails d model X을 실행하고 rails g model X ...을 실행하십시오. 그러나 rake db:migrate을 실행하면 실패하고 콘솔에 '테이블 X가 이미 있습니다'라는 메시지가 표시됩니다.모델을 리메이크 할 때 수행 할 작업

schema.rb를 수동으로 다시 작성하면 작동하는 것으로 나타났습니다.

올바른 방법인가요? 동일한 모델을 파괴하고 만들 때 할 일 (예 : 재 작성)이 있습니까?

+0

테이블 당신을 업데이트합니다 데이터베이스를 변경하려면 롤백을 수행해야합니다. 그러나 모델을 삭제하고 다시 만드는 것은 잘 피하는 메커니즘이 있기 때문에 약간의 냄새처럼 보입니다. 모델을 완전히 삭제해야하는 용도는 무엇입니까? 수동으로'schema.rb'를 다시 쓰는 것은 틀 렸습니다. –

+0

"name : string"이라는 모델 'user'를 만들었지 만 나중에 "email : string"을 추가하려고 할 때 모델을 삭제합니다. – user53216

+0

그리고 저는 "이주가 존재하는 이유는 무엇입니까?"라고 말하고 있습니다. http://guides.rubyonrails.org/active_record_migrations.html –

답변

1

마이그레이션을 찾고 있습니다. 데이터를 추가하려면 모델을 삭제할 필요가 없습니다. http://guides.rubyonrails.org/active_record_migrations.html#creating-a-migration

는이 같은 싶지 : 이것은 DB/마이그레이션에 파일을 생성

rails generate migration AddEmailToUsers email:string # In the command line 

/

class AddEmailToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :email, :string 
    end 
end 

는 그런 다음 rake db:migrate 실행을하며

0

여기에서 문제는 모델을 삭제하고 생성하더라도 데이터베이스가 이미 있다는 것입니다. 기존 db를 삭제하려면 db 폴더에있는 development.sqlite 파일을 삭제하면됩니다.

+0

이것은 모든 데이터 (다른 모델의 데이터 포함)를 파괴합니다. –

+0

Aaagh; Rails가 모델 기능을 업데이트하는 메커니즘을 가지고있을 때 왜 이런 조언을합니까? 간단한 열을 추가하기 위해 원본 파일 등을 삭제할 이유가 없습니다. –

관련 문제