[ruby-on-rails] Rails DB 마이그레이션-테이블 삭제 방법

필요하다고 생각되는 테이블을 추가했지만 더 이상 테이블을 사용할 계획이 없습니다. 해당 테이블을 어떻게 제거해야합니까?

이미 마이그레이션을 실행 했으므로 테이블이 데이터베이스에 있습니다. 나는 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 :productsand raise ActiveRecord::IrreversibleMigration입니다.

그런 다음 실행 rake db:migrate하면 테이블이 삭제됩니다.


답변

마이그레이션을 수동으로 작성하십시오. 예를 들어 실행합니다 rails g migration DropUsers.

마이그레이션 코드에 관해서는 Maxwell Holder의 포스트 Rails Migration Checklist를 인용하겠습니다.

불량-실행 rake db:migraterake 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)


답변

  1. 레일 g 마이그레이션 drop_users
  2. 마이그레이션 수정
    class DropUsers < ActiveRecord::Migration
      def change
        drop_table :users do |t|
          t.string :name
          t.timestamps
        end
      end
    end
  1. 레이크 db : 마이그레이션

답변

완전히 “공식적”이 되려면 새로운 마이그레이션을 만들고 drop_table을 self.up에 넣어야합니다. self.down 메소드는 테이블을 완전히 재생성하기위한 모든 코드를 포함해야합니다. 마이그레이션을 생성 할 때 schema.rb에서 해당 코드를 가져 왔을 수 있습니다.

더 이상 필요하지 않다는 것을 알고있는 테이블을 작성하기 위해 코드를 작성하는 것은 조금 이상하게 보이지만, 모든 마이그레이션 코드를 완전하고 “공식”으로 유지하는 것이 맞습니까?

방금 삭제해야 할 테이블에 대해이 작업을 수행했지만 정직하게 “다운”을 테스트하지 않았으며 왜 그런지 잘 모르겠습니다.