programing

레일 마이그레이션을 사용하여 열을 내리는 방법

linuxpc 2023. 6. 15. 21:38
반응형

레일 마이그레이션을 사용하여 열을 내리는 방법

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

remove_column :table_name, :column_name

예를 들어:

remove_column :users, :hobby

사용자 테이블에서 취미 열을 제거합니다.

이전 버전의 레일의 경우

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

레일 3 이상의 경우

rails generate migration RemoveFieldNameFromTableName field_name:datatype

레일 4가 업데이트되었으므로 변경 방법을 마이그레이션에 사용하여 열을 삭제할 수 있으며 마이그레이션이 성공적으로 롤백됩니다.레일 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

데이터베이스 테이블에서 열을 제거할 때 변경 방법을 사용하지 마십시오(Rails 3 앱의 마이그레이션 파일에서 원하지 않는 내용 예).

  def change
    remove_column :table_name, :field_name
  end

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

Rails4 앱에서는 열을 제거하는 경우에도 변경 방법을 사용할 수 있습니다.세 번째 매개 변수는 data_type이며 선택적인 four에서 옵션을 지정할 수 있습니다.설명서의 '사용 가능한 변환' 섹션에는 약간 숨겨져 있습니다.

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_테이블 블록

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

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

읽기 쉽고 한 번에 여러 번 변경할 수 있기 때문에 더 좋습니다.

다음은 지원되는 change_table 메서드의 전체 목록입니다.

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

레일 5 및 6에 대한 명확하고 간단한 지침

  • 경고: 데이터가 손실됩니다.
  • 경고: 아래 지침은 사소한 마이그레이션을 위한 것입니다.수백만 개의 행, 읽기/쓰기 dbs, 클러스터 등이 포함된 복잡한 마이그레이션의 경우 이 권장 사항은 다음과 같습니다.

마이그레이션 만들기

터미널에서 다음 명령을 실행합니다.

rails generate migration remove_fieldname_from_tablename fieldname:fieldtype(관습에 따라 복수로 된 테이블 이름).여기에 있는 설명서를 참조하십시오.)

예: rails g migration RemoveAcceptedFromQuotes accepted:boolean

마이그레이션 확인

# 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다 (둘다같습다니)다둘

..그리고 나서 경주에 나가요!

열을합니다.rake db:migrate), 열을 삭제해야 합니다.또한 이 마이그레이션이 롤백되는 경우 을 다시 추가해야 합니다.rake db:rollback).

구문:

remove_column :table_name, :column_name, :type

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

예:

remove_column :users, :last_name, :string

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

레일 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

RAIL 5 앱의 열 제거

rails g migration Remove<Anything>From<TableName> [columnName:type]

은▁file 안에 합니다.db/migrate디렉토리입니다.generator에서 열 중입니다.

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

레일즈에 대한 빠른 참조 가이드도 여기에서 찾을 수 있습니다.

다음을 시도할 수 있습니다.

remove_column :table_name, :column_name

(공식 문서)

rails g migration RemoveXColumnFromY column_name:data_type

=열 X = 열이름
= Y = 테이블 이름

편집

변경되었다.RemoveXColumnToYRemoveXColumnFromYcomments - 더 per comments - doing.as 수중행보작명설다니명합게확하마다이을업그인제레실이션이로▁as▁per다▁more▁is니▁provides▁for.

테이블에서 열을 제거하려면 다음 마이그레이션을 실행해야 합니다.

rails g migration remove_column_name_from_table_name column_name:data_type

그런 다음 명령을 실행합니다.

rake db:migrate

remove_columnchange메소드는 테이블에서 열을 삭제하는 데 도움이 됩니다.

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

자세한 내용은 다음 링크를 참조하십시오. http://guides.rubyonrails.org/active_record_migrations.html

표에서 열을 쉽게 3단계로 제거하려면 다음과 같이 하십시오.

  1. 이 명령어를 작성합니다.

rails g migration remove_column_from_table_name

터미널 1 파일에서 이 명령을 실행한 후 이 이름과 타임스탬프로 생성됩니다(_table_name에서_column 제거).

그러면 이 파일로 이동합니다.

  1. 당신이 써야 하는 내부 파일

    remove_column :table_name, :column_name

  2. 마지막으로 콘솔로 이동한 다음 수행

    rake db:migrate

자체적으로 마이그레이션 파일에 추가할 아래 명령을 제공합니다.

rails g migration RemoveColumnFromModel

위 명령을 실행한 후 마이그레이션 파일 remove_column 코드가 직접 추가되어야 함을 확인할 수 있습니다.

그런 다음 DB를 마이그레이션합니다.

rake db:migrate

1단계: 마이그레이션 생성

  rails g migration remove_column_name_from_table

2단계: 방금 만든 파일 마이그레이션의 코드 변경

레일 버전 < 3

  def change
    remove_column :table_name, :column_name, :datatype
  end

레일 버전 > = 3

  def change
    remove_column :table_name, :column_name
  end

3단계: 마이그레이션

rake db:migrate

레일 콘솔에서 하나 더 제공

ActiveRecord::Migration.remove_column(:table_name, :column_name)

간단히 열을 제거할 수 있습니다.

remove_column :table_name, :column_name

예를들면,

remove_column :posts, :comment

먼저 다음 명령을 실행하는 마이그레이션 파일을 만듭니다.

rails g migration RemoveAgeFromUsers age:string

그런 다음 프로젝트의 루트 디렉터리에서 다음 명령을 실행하여 마이그레이션을 실행합니다.

rails db:migrate

통해.
remove_column :table_name, :column_name
마이그레이션 파일에서

다음을 입력하여 레일 콘솔에서 직접 열을 제거할 수 있습니다.
ActiveRecord::Base.remove_column :table_name, :column_name

이렇게 합니다;

rails g migration RemoveColumnNameFromTables column_name:type

예.rails g migration RemoveTitleFromPosts title:string

어쨌든 ActiveRecord는 런타임에 데이터베이스 열을 캐시하므로 앱이 재부팅될 때까지 예외가 발생할 수 있으므로 다운타임도 고려하는 것이 좋습니다.

참조: 강력한 마이그레이션

  1. 열을 모형에서 무시됨으로 표시
class MyModel < ApplicationRecord
  self.ignored_columns = ["my_field"]
end
  1. 마이그레이션 생성
$ bin/rails g migration DropMyFieldFromMyModel
  1. 마이그레이션 편집
class DropMyFieldFromMyModel < ActiveRecord::Migration[6.1]
  def change
    safety_assured { remove_column :my_table, :my_field }
  end
end
  1. 마이그레이션 실행
$ bin/rails db:migrate

레일 마이그레이션 명령을 사용할 수 있습니다.

rails generate migration RemoveColumnNameFromTableName column_name:column_type

데이터베이스를 마이그레이션할 수 있습니다.

rails db:migrate

레일 콘솔에서 실행하기만 하면 됩니다.

ActiveRecord::Base.connection.remove_column("table_name", :column_name, :its_data_type)

또는

TableName.find_by_sql(“ALTER TABLE table_name DROP column_name”)

언급URL : https://stackoverflow.com/questions/2831059/how-to-drop-columns-using-rails-migration

반응형