[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을 건너 뛰면 마이그레이션이 열을 성공적으로 제거하지만 마이그레이션을 롤백하면 오류가 발생합니다.