필요하다고 생각되는 테이블을 추가했지만 더 이상 테이블을 사용할 계획이 없습니다. 해당 테이블을 어떻게 제거해야합니까?
이미 마이그레이션을 실행 했으므로 테이블이 데이터베이스에 있습니다. 나는 rails generate migration
이것을 처리 할 수 있어야하지만 아직 얼마나 알아 냈지 않았습니다.
난 노력 했어:
rails generate migration drop_tablename
그러나 그것은 단지 빈 마이그레이션을 생성했습니다.
Rails에서 테이블을 삭제하는 “공식적인”방법은 무엇입니까?
답변
항상 원하는 코드를 갖기 위해 단순히 마이그레이션을 생성 할 수있는 것은 아닙니다. 빈 마이그레이션을 만든 다음 필요한 코드로 채울 수 있습니다.
마이그레이션에서 다양한 작업을 수행하는 방법에 대한 정보는 다음을 참조하십시오.
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
보다 구체적으로, 다음 방법을 사용하여 테이블을 삭제하는 방법을 볼 수 있습니다.
drop_table :table_name
답변
먼저 원하는 이름으로 빈 마이그레이션을 생성하십시오. 적절한 날짜를 만들기 때문에 이런 식으로하는 것이 중요합니다.
rails generate migration DropProductsTable
이렇게하면 20111015185025_drop_products_table.rb와 같이 / db / migrate /에 .rb 파일이 생성됩니다.
이제 다음과 같이 해당 파일을 편집하십시오.
class DropProductsTable < ActiveRecord::Migration
def up
drop_table :products
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
내가 추가 한 유일한 것은 drop_table :products
and raise ActiveRecord::IrreversibleMigration
입니다.
그런 다음 실행 rake db:migrate
하면 테이블이 삭제됩니다.
답변
마이그레이션을 수동으로 작성하십시오. 예를 들어 실행합니다 rails g migration DropUsers
.
마이그레이션 코드에 관해서는 Maxwell Holder의 포스트 Rails Migration Checklist를 인용하겠습니다.
불량-실행 rake db:migrate
후 rake db:rollback
실패
class DropUsers < ActiveRecord::Migration
def change
drop_table :users
end
end
GOOD-마이그레이션을 되돌릴 수 없음을 나타냅니다.
class DropUsers < ActiveRecord::Migration
def up
drop_table :users
end
def down
fail ActiveRecord::IrreversibleMigration
end
end
더 나은-실제로 뒤집을 수 있습니다
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :email, null: false
t.timestamps null: false
end
end
end
답변
: 여기에 제공된 답변이 제대로 작동 동안, 나는, 내가 여기에 그것을 발견 조금 더 ‘간단’무언가를 원하는 링크를
먼저 입력 콘솔 레일 :
$rails console
그런 다음 다음을 입력하십시오.
ActiveRecord::Migration.drop_table(:table_name)
그리고 나를 위해 일했습니다!
답변
다음 명령을 사용하여 새 마이그레이션 파일을 작성해야합니다
rails generate migration drop_table_xyz
drop_table 코드를 새로 생성 된 마이그레이션 파일 (db / migration / xxxxxxx_drop_table_xyz)에 작성하십시오.
drop_table :tablename
또는 마이그레이션하지 않고 테이블을 삭제하려면 레일 콘솔을 열면됩니다.
$ rails c
다음 명령을 실행하십시오.
ActiveRecord::Base.connection.execute("drop table table_name")
또는 더 간단한 명령을 사용할 수 있습니다
ActiveRecord::Migration.drop_table(:table_name)
답변
- 레일 g 마이그레이션 drop_users
- 마이그레이션 수정
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :name
t.timestamps
end
end
end
- 레이크 db : 마이그레이션
답변
완전히 “공식적”이 되려면 새로운 마이그레이션을 만들고 drop_table을 self.up에 넣어야합니다. self.down 메소드는 테이블을 완전히 재생성하기위한 모든 코드를 포함해야합니다. 마이그레이션을 생성 할 때 schema.rb에서 해당 코드를 가져 왔을 수 있습니다.
더 이상 필요하지 않다는 것을 알고있는 테이블을 작성하기 위해 코드를 작성하는 것은 조금 이상하게 보이지만, 모든 마이그레이션 코드를 완전하고 “공식”으로 유지하는 것이 맞습니까?
방금 삭제해야 할 테이블에 대해이 작업을 수행했지만 정직하게 “다운”을 테스트하지 않았으며 왜 그런지 잘 모르겠습니다.