ruby-on-rails - ror - ruby schema




Rails DB 마이그레이션-테이블 삭제 방법 (13)

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

이미 마이 그 레이션을 실행 했으므로 테이블이 제 데이터베이스에 있습니다. rails generate migration 을 처리 할 수 ​​있어야한다고 생각하지만 아직 방법을 알지 못했습니다.

난 노력 했어:

rails generate migration drop_tablename

하지만 방금 빈 마이그레이션이 발생했습니다.

Rails에서 테이블을 삭제하는 "공식적인"방법은 무엇입니까?


  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. rake db : 마이그레이션

가이드에서와 같은 방식으로 마이그레이션을 롤백 할 수 있습니다.

http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations

이전 생성 :

rails generate migration revert_create_tablename

마이그레이션 작성 :

require_relative '20121212123456_create_tablename'

class RevertCreateTablename < ActiveRecord::Migration[5.0]
  def change
    revert CreateTablename    
  end
end

이렇게하면 롤백 할 수도 있고 마이그레이션을 되돌릴 수 있습니다.


내 말은, 완전히 "공식적"이라고 생각하면 새로운 마이그레이션을 만들어 self_tup에 drop_table을 넣어야 할 것입니다. self.down 메소드는 테이블을 전체적으로 재생성하기위한 모든 코드를 포함해야한다. 아마도 코드는 마이그레이션을 만들 때 schema.rb에서 가져온 것일 수 있습니다.

약간 이상한 것처럼 보입니다. 더 이상 필요하지 않을 것이라는 것을 알고있는 테이블을 만들기 위해 코드를 작성하는 것이 가능합니다.하지만 이는 마이그레이션 코드를 모두 "공식적인"코드로 유지할 것입니다, 그렇습니까?

나는 방금 내가 떨어 뜨릴 필요가있는 테이블을 위해 이것을했다. 그러나 정직하게 "down"을 테스트하지 않았고, 내가 왜 그렇게 될지 확신하지 못했다.


다음 명령을 사용하여 새 마이그레이션 파일을 만들어야합니다.

rails generate migration drop_table_xyz

새로 생성 된 이전 파일 (db / migration / xxxxxxx_drop_table_xyz)에 drop_table 코드를 작성합니다.

drop_table :tablename

또는 마이그레이션없이 테이블을 삭제하려면 레일즈 콘솔을 엽니 다.

$ rails c

다음 명령을 실행하십시오.

ActiveRecord::Base.connection.execute("drop table table_name")

또는 더 단순화 된 명령을 사용할 수 있습니다.

ActiveRecord::Migration.drop_table(:table_name)

당신이 할 수있는 최선의 방법은

rails g migration Drop_table_Users

다음을 수행하십시오

rake db:migrate

먼저 원하는 이름으로 빈 마이그레이션을 생성하십시오. 적절한 날짜를 만들기 때문에 이렇게하는 것이 중요합니다.

rails generate migration DropProductsTable

그러면 / db / migrate / like에 .rb 파일이 생성됩니다. 20111015185025_drop_products_table.rb

이제이 파일을 다음과 같이 편집하십시오.

class DropProductsTable < ActiveRecord::Migration
  def up
    drop_table :products
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end

내가 추가 한 유일한 것은 drop_table :products 이고 raise ActiveRecord::IrreversibleMigration drop_table :products 입니다.

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


여기에 제공된 답변이 제대로 작동하는 동안 나는 좀 더 '직선적 인'것을 원했지만 여기에서 그것을 발견했습니다 : link 먼저 레일스 콘솔 입력 :

$rails console

다음을 입력하십시오.

ActiveRecord::Migration.drop_table(:table_name)

그리고 끝내고, 나를 위해 일했습니다!


열어 본 레일 콘솔

ActiveRecord::Base.connection.execute("drop table table_name")

운영

rake db:migrate:down VERSION=<version>

여기서 <version> 은 되돌리려는 마이그레이션 파일의 버전 번호입니다.

예:-

rake db:migrate:down VERSION=3846656238

원하는 코드를 이미 가지고 있기 때문에 마이그레이션을 생성 할 수있는 것은 아닙니다. 빈 이주를 작성한 다음 필요한 코드로 채울 수 있습니다.

다음은 마이그레이션에서 다른 작업을 수행하는 방법에 대한 정보입니다.

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

보다 구체적으로, 다음 방법을 사용하여 테이블을 삭제하는 방법을 볼 수 있습니다.

drop_table :table_name

특정 테이블을 삭제하려는 경우 수행 할 수 있습니다.

$ rails db:migrate:up VERSION=[Here you can insert timestamp of table]

그렇지 않으면 할 수있는 모든 데이터베이스를 삭제하려는 경우

$rails db:drop

ActiveRecord::Base.connection.drop_table :table_name


테이블 / 마이그레이션 삭제

실행 : - $ rails는 마이그레이션을 생성합니다. DropTablename

exp : - $ rails는 마이그레이션을 생성합니다. DropProducts





rake