[ruby-on-rails] Rails 마이그레이션을 사용하여 열을 삭제하는 방법

Rails 마이그레이션을 통해 데이터베이스 테이블 열을 삭제하는 구문은 무엇입니까?



답변

remove_column :table_name, :column_name

예를 들어 :

remove_column :users, :hobby

users 테이블에서 취미 열을 제거합니다.


답변

구 버전의 Rails

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Rails 3 이상

rails generate migration RemoveFieldNameFromTableName field_name:datatype


답변

Rails 4가 업데이트되었으므로 마이그레이션에서 변경 방법을 사용하여 열을 삭제하면 마이그레이션이 성공적으로 롤백됩니다. Rails 3 애플리케이션에 대한 다음 경고를 읽으십시오.

레일 3 경고

이 명령을 사용할 때 다음을 참고하십시오.

rails generate migration RemoveFieldNameFromTableName field_name:datatype

생성 된 마이그레이션은 다음과 같습니다.

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

데이터베이스 테이블에서 열을 제거 할 때 change 메소드를 사용하지 마십시오 (Rails 3 앱의 마이그레이션 파일에서 원하지 않는 예).

  def change
    remove_column :table_name, :field_name
  end

Rails 3의 변경 방법은 remove_column과 관련하여 현명하지 않으므로이 마이그레이션을 롤백 할 수 없습니다.


답변

rails4 앱에서 변경 방법을 사용하여 열을 제거 할 수도 있습니다. 세 번째 매개 변수는 data_type이며 선택 사항으로 옵션을 제공 할 수 있습니다. 문서의 ‘사용 가능한 변환’섹션에 약간 숨겨져 있습니다 .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end


답변

이를 수행하는 두 가지 좋은 방법이 있습니다.

remove_column

다음과 같이 remove_column을 사용하면됩니다.

remove_column :users, :first_name

스키마를 한 번만 변경하면됩니다.

change_table 블록

다음과 같이 change_table 블록을 사용하여이 작업을 수행 할 수도 있습니다.

change_table :users do |t|
  t.remove :first_name
end

나는 이것을 더 읽기 쉽기 때문에 이것을 선호하며 한 번에 여러 가지를 변경할 수 있습니다.

지원되는 change_table 메소드의 전체 목록은 다음과 같습니다.

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table


답변

레일 5에서는 터미널에서이 명령을 사용할 수 있습니다.

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

예를 들어 테이블 사용자에서 access_level (string) 열을 제거하려면 다음을 수행하십시오.

rails generate migration remove_access_level_from_users access_level:string

그런 다음 다음을 실행하십시오.

rake db:migrate


답변

이 이전 경우 (즉, 이러한 열을 제거하기 이전 생성 rake db:migrate)이 있어야 열 드롭 . 이 마이그레이션이 롤백되면 열을 다시 추가 해야 합니다 ( rake db:rollback).

문법 :

remove_column : table_name, : column_name, : type

열을 제거 하고 마이그레이션이 롤백 된 경우 열을 다시 추가합니다 .

예:

remove_column :users, :last_name, :string

참고 : data_type을 건너 뛰면 마이그레이션이 열을 성공적으로 제거하지만 마이그레이션을 롤백하면 오류가 발생합니다.