답변:
remove_column :table_name, :column_name
예를 들어 :
remove_column :users, :hobby
users 테이블에서 취미 열을 제거합니다.
remove_column :table_name, :column_name, :type, :options
내에서도 사용할 수 있습니다 change
. 문서에서 : 및 매개 변수가있는 경우 무시됩니다. 이를 마이그레이션 방법 으로 제공하면 되돌릴 수 있습니다. 이 경우, 및 add_column 사용됩니다. type
options
change
type
options
change
메소드 에서 컬럼을 제거 할 수 있지만 컬럼 유형을 지정하는 경우에만 가능합니다. 예 remove_column, :table_name, :column_name, :column_type
. 그렇지 않으면 마이그레이션을 실행할 때 다음 오류가 발생합니다.remove_column is only reversible if given a type
구 버전의 Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Rails 3 이상
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
또한 작동
AddXXXtoTTT
가 RemoveXXXFromTTT
DATA_TYPE, 적절한 add_column 및 remove_column 문이 생성 될 것이다 : filed_name의 화이트리스트 이격 하였다 될 수 rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
번의 이동을 이용하여 두 개의 속성을 제거한다. 그 또한 참고 remove_column
를 지원하지 않습니다 change
당신이 모두를 작성해야하므로, 방법 up
및 down
.
change
가이 를 지원 하는 것 같습니다 . 롤백은 정상적으로 작동합니다.
change
수 있는 방법을 사용하는 경우 * 데이터 유형 (및 다른 모든 필드 수정 자)을 알려 주어야하므로 마이그레이션을 롤백하면 필드가 올바르게 다시 생성 될 수 있다고 생각합니다. * 되돌릴 때 데이터베이스 구조 측면에서 볼 때 물론 해당 열의 데이터는 분명히 손실됩니다.
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과 관련하여 현명하지 않으므로이 마이그레이션을 롤백 할 수 없습니다.
change
방법 을 사용 하면 rake db:rollback
명령이 오류가 발생합니다. rake db:rollback
기본적으로의 반대입니다 rake db:migrate
. 이 버그는 Rails 4에서 수정되었습니다 :)
이를 수행하는 두 가지 좋은 방법이 있습니다.
다음과 같이 remove_column을 사용하면됩니다.
remove_column :users, :first_name
스키마를 한 번만 변경하면됩니다.
다음과 같이 change_table 블록을 사용하여이 작업을 수행 할 수도 있습니다.
change_table :users do |t|
t.remove :first_name
end
나는 이것을 더 읽기 쉽기 때문에 이것을 선호하며 한 번에 여러 가지를 변경할 수 있습니다.
지원되는 change_table 메소드의 전체 목록은 다음과 같습니다.
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
이 이전 경우 (즉, 이러한 열을 제거하기 이전 생성 rake db:migrate
)이 있어야 열 드롭 . 이 마이그레이션이 롤백되면 열을 다시 추가 해야 합니다 ( rake db:rollback
).
문법 :
remove_column : table_name, : column_name, : type
열을 제거 하고 마이그레이션이 롤백 된 경우 열을 다시 추가합니다 .
예:
remove_column :users, :last_name, :string
참고 : data_type을 건너 뛰면 마이그레이션이 열을 성공적으로 제거하지만 마이그레이션을 롤백하면 오류가 발생합니다.
터미널에서 다음 명령을 실행하십시오 .
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
참고 : 테이블 이름은 레일 규칙에 따라 복수 형식이어야합니다.
예:
필자의 경우 테이블 accepted
에서 열 (부울 값) 을 제거하고 싶습니다 quotes
.
rails g migration RemoveAcceptedFromQuotes accepted:boolean
필드를 테이블에 추가 / 제거 할 때 문서 re : 규칙을 참조하십시오 .
필드를 테이블에 추가하는 마이그레이션을 생성하는 특수한 구문 바로 가기가 있습니다.
레일 생성 마이그레이션 add_fieldname_to_tablename fieldname : fieldtype
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... 그리고 당신은 경주를 떠납니다!
rails db:migrate
RAILS 5 앱의 열 제거
rails g migration Remove<Anything>From<TableName> [columnName:type]
위의 명령은 db/migrate
디렉토리 내에 마이그레이션 파일을 생성합니다 . 스 니펫 블로우는 Rails 생성기에서 생성 한 테이블 예제에서 열 제거 중 하나입니다.
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
또한 여기 에서 찾을 수있는 Rails에 대한 빠른 참조 안내서를 만들었습니다 .
rails g migration RemoveXColumnFromY column_name:data_type
X = 열 이름
Y = 테이블 이름
편집하다
의견 RemoveXColumnToY
에 RemoveXColumnFromY
따라 변경 -마이그레이션이 실제로 수행하고있는 작업에 대한 명확성을 제공합니다.
remove_column
에 change
방법 당신이 테이블에서 열을 삭제하는 데 도움이 될 것입니다.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
완전한 참조를 위해이 링크로 이동하십시오 : http://guides.rubyonrails.org/active_record_migrations.html
이렇게하세요;
rails g migration RemoveColumnNameFromTables column_name:type
즉 rails g migration RemoveTitleFromPosts title:string
어쨌든 ActiveRecord는 런타임에 데이터베이스 열을 캐시하므로 열을 삭제하면 앱이 재부팅 될 때까지 예외가 발생할 수 있기 때문에 가동 중지 시간을 고려하는 것이 좋습니다.
참조 : 강력한 마이그레이션
up
과 내부가down
아닌 메소드 를 수행하십시오change
.