etc./StackOverFlow

Rails: Ruby on Rails 마이그레이션에서 데이터베이스 열의 이름을 바꾸려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2022. 2. 27. 12:39
반응형

질문자 :user1994764


hased_password 대신 hashed_password 열 이름을 잘못 지정했습니다.

마이그레이션을 사용하여 이 열의 이름을 바꾸면 데이터베이스 스키마를 어떻게 업데이트합니까?



rename_column :table, :old_column, :new_column

이를 위해 별도의 마이그레이션을 만들고 싶을 것입니다. FixColumnName 이름을 원하는 대로 바꿉니다.):

 script/generate migration FixColumnName # creates db/migrate/xxxxxxxxxx_fix_column_name.rb

그런 다음 원하는 대로 마이그레이션을 편집합니다.

 # db/migrate/xxxxxxxxxx_fix_column_name.rb class FixColumnName < ActiveRecord::Migration def self.up rename_column :table_name, :old_column, :new_column end def self.down # rename back if you need or do something else or do nothing end end

Rails 3.1의 경우:

updown 방법이 여전히 적용되지만 Rails 3.1은 "별도의 down 방법을 작성할 필요 없이 마이그레이션이 롤백될 때 데이터베이스를 마이그레이션하고 되돌리는 방법을 알고 있는" change

자세한 내용은 " 활성 레코드 마이그레이션 "을 참조하십시오.

 rails g migration FixColumnName class FixColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end

이름을 바꿀 열이 너무 많거나 테이블 이름을 계속해서 반복해야 하는 경우:

 rename_column :table_name, :old_column1, :new_column1 rename_column :table_name, :old_column2, :new_column2 ...

change_table 을 사용하여 좀 더 깔끔하게 유지할 수 있습니다.

 class FixColumnNames < ActiveRecord::Migration def change change_table :table_name do |t| t.rename :old_column1, :new_column1 t.rename :old_column2, :new_column2 ... end end end

그런 다음 db:migrate 를 하거나 귀하의 비즈니스를 수행하십시오.


레일 4의 경우:

만드는 동안 Migration 열을 바꾸기 위해, (4)는 생성 레일 change 대신에있어서 updown 상기 섹션에 언급한다. 생성된 change 방법은 다음과 같습니다.

 $ > rails g migration ChangeColumnName

그러면 다음과 유사한 마이그레이션 파일이 생성됩니다.

 class ChangeColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end

nowk

제 생각에는 이 경우 rake db:rollback 을 사용한 다음 마이그레이션을 편집하고 rake db:migrate 다시 실행하는 것이 좋습니다.

그러나 손실하고 싶지 않은 열에 데이터가 있는 경우에는 rename_column 을 사용하십시오.


elf.xf

열이 이미 데이터로 채워져 있고 프로덕션 환경에 있는 경우 마이그레이션을 기다리는 동안 프로덕션 다운타임을 방지하기 위해 단계별 접근 방식을 권장합니다.

먼저 새 이름으로 열을 추가하고 이전 열 이름의 값으로 채우는 db 마이그레이션을 만듭니다.

 class AddCorrectColumnNames < ActiveRecord::Migration def up add_column :table, :correct_name_column_one, :string add_column :table, :correct_name_column_two, :string puts 'Updating correctly named columns' execute "UPDATE table_name SET correct_name_column_one = old_name_column_one, correct_name_column_two = old_name_column_two" end end def down remove_column :table, :correct_name_column_one remove_column :table, :correct_name_column_two end end

그런 다음 해당 변경 사항을 커밋하고 변경 사항을 프로덕션으로 푸시합니다.

 git commit -m 'adding columns with correct name'

그런 다음 커밋이 프로덕션으로 푸시되면 실행합니다.

 Production $ bundle exec rake db:migrate

그런 다음 이전 열 이름을 새 열 이름으로 참조한 모든 보기/컨트롤러를 업데이트합니다. 내 테스트 스위트를 실행하고 해당 변경 사항만 커밋합니다. (로컬에서 작동하는지 확인하고 모든 테스트를 먼저 통과한 후!)

 git commit -m 'using correct column name instead of old stinky bad column name'

그런 다음 해당 커밋을 프로덕션으로 푸시합니다.

이 시점에서 마이그레이션 자체와 관련된 가동 중지 시간에 대해 걱정하지 않고 원래 열을 제거할 수 있습니다.

 class RemoveBadColumnNames < ActiveRecord::Migration def up remove_column :table, :old_name_column_one remove_column :table, :old_name_column_two end def down add_column :table, :old_name_column_one, :string add_column :table, :old_name_column_two, :string end end

그런 다음 이 최신 마이그레이션을 프로덕션으로 푸시하고 bundle exec rake db:migrate 를 백그라운드에서 실행합니다.

이것이 프로세스와 조금 더 관련되어 있다는 것을 알고 있지만 프로덕션 마이그레이션에 문제가 있는 것보다 차라리 이 작업을 수행하고 싶습니다.


Paul Pettengill

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

Available Transformations

rename_column(table_name, column_name, new_column_name):

열의 이름을 바꾸지만 유형과 내용은 유지합니다.


James Manning

아래 명령어를 실행하여 마이그레이션 파일을 생성합니다.

 rails g migration ChangeHasedPasswordToHashedPassword

db/migrate 폴더에 생성된 파일에 다음과 같이 rename_column 을 작성합니다.

 class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end

Shoaib Malik

API에서:

 rename_column(table_name, column_name, new_column_name)

열의 이름을 바꾸지만 유형과 내용은 동일하게 유지됩니다.


super_p

코드가 다른 코드와 공유되지 않는 경우 가장 좋은 방법은 rake db:rollback 한 다음 마이그레이션에서 열 이름을 편집하고 rake db:migrate 입니다. 그게 다야

그리고 다른 마이그레이션을 작성하여 열의 이름을 바꿀 수 있습니다.

 def change rename_column :table_name, :old_name, :new_name end

그게 다야.


sunil

Ruby on Rails의 일부 버전은 마이그레이션에 대한 up/down 방법을 지원하며 마이그레이션에 up/down 방법이 있는 경우 다음을 수행합니다.

 def up rename_column :table_name, :column_old_name, :column_new_name end def down rename_column :table_name, :column_new_name, :column_old_name end

마이그레이션에 change 방법이 있는 경우:

 def change rename_column :table_name, :column_old_name, :column_new_name end

자세한 내용은 Ruby on Rails - 마이그레이션 또는 활성 레코드 마이그레이션을 참조 하세요.


uma

대안 옵션으로, 마이그레이션 아이디어와 결혼하지 않은 경우 Datamapper 스타일로 이름 변경을 자동으로 처리하는 ActiveRecord에 대한 매력적인 보석이 있습니다. 모델의 열 이름을 변경하고 model.rb의 맨 아래에 Model.auto_upgrade!를 넣어야 합니다. 데이터베이스는 즉석에서 업데이트됩니다.

https://github.com/DAddYE/mini_record

참고: 충돌을 방지하려면 db/schema.rb 를 nuke해야 합니다.

아직 베타 단계에 있으며 모든 사람이 사용할 수 있는 것은 아니지만 여전히 매력적인 선택입니다(현재 문제 없이 두 개의 중요하지 않은 프로덕션 앱에서 사용 중입니다).


Steven Garcia

열 이름을 전환해야 하는 경우 중복 열 이름 오류 를 방지하기 위해 자리 표시자를 만들어야 합니다. 다음은 예입니다.

 class SwitchColumns < ActiveRecord::Migration def change rename_column :column_name, :x, :holder rename_column :column_name, :y, :x rename_column :column_name, :holder, :y end end

Abram

현재 데이터가 중요하지 않은 경우 다음을 사용하여 원래 마이그레이션을 중단할 수 있습니다.

 rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'

따옴표 없이 원래 마이그레이션을 변경하고 다음을 수행하여 업 마이그레이션을 다시 실행합니다.

 rake db:migrate

dirtydexter

새 마이그레이션을 만들고 블록에서 rename_column 같이 rename_column을 사용하기만 하면 됩니다.

 rename_column :your_table_name, :hased_password, :hashed_password

jon snow

Ruby on Rails 4의 경우:

 def change rename_column :table_name, :column_name_old, :column_name_new end

Hardik Hardiya

수동으로 아래 방법을 사용할 수 있습니다.

다음과 같이 마이그레이션을 수동으로 편집할 수 있습니다.

  • app/db/migrate/xxxxxxxxx_migration_file.rb 열기

  • hased_passwordhashed_password 업데이트

  • 아래 명령을 실행

     $> rake db:migrate:down VERSION=xxxxxxxxx

그런 다음 마이그레이션이 제거됩니다.

 $> rake db:migrate:up VERSION=xxxxxxxxx

업데이트된 변경 사항과 함께 마이그레이션이 추가됩니다.


Sumit Munot

마이그레이션 파일 생성:

 rails g migration FixName

# db/migrate/xxxxxxxxxx.rb 생성

원하는 대로 마이그레이션을 수정하세요.

 class FixName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end

vipin

rails g migration ChangesNameInUsers (또는 원하는 이름)를 실행합니다.

방금 생성된 마이그레이션 파일을 열고 메서드에 다음 줄을 추가합니다( def changeend 사이).

rename_column :table_name, :the_name_you_want_to_change, :the_new_name

파일을 저장하고 콘솔에서 rake db:migrate

데이터베이스에서 이름이 실제로 변경되었는지 확인 schema.db

도움이 되었기를 바랍니다 :)


Maddie

키스 하자. 세 가지 간단한 단계만 거치면 됩니다. 다음은 Rails 5.2에서 작동합니다.

1 . 마이그레이션 생성

  • rails g migration RenameNameToFullNameInStudents

  • rails g RenameOldFieldToNewFieldInTableName - 이렇게 하면 나중에 코드 기반의 유지 관리자에게 완벽하게 명확해집니다. (테이블 이름에 복수형 사용).

2. 마이그레이션 편집

# I prefer to explicitly write the up and down methods.

# ./db/migrate/20190114045137_rename_name_to_full_name_in_students.rb

 class RenameNameToFullNameInStudents < ActiveRecord::Migration[5.2] def up # rename_column :table_name, :old_column, :new_column rename_column :students, :name, :full_name end def down # Note that the columns are reversed rename_column :students, :full_name, :name end end

3. 마이그레이션 실행

rake db:migrate

그리고 당신은 경주를 떠났습니다!


BenKoshy

Ruby on Rails 마이그레이션 생성 :

 $:> rails g migration Fixcolumnname

마이그레이션 파일(XXXXXfixcolumnname.rb)에 코드 삽입 :

 class Fixcolumnname < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end

vipin

$: rails g migration RenameHashedPasswordColumn invoke active_record create db/migrate/20160323054656_rename_hashed_password_column.rb

해당 마이그레이션 파일을 열고 해당 파일을 아래와 같이 수정합니다(원래 table_name 입력).

 class RenameHashedPasswordColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end

Prabhakar Undurthi

 def change rename_column :table_name, :old_column_name, :new_column_name end

Apoorv

PostgreSQL 데이터베이스 로 Rails 6 애플리케이션에서 작업할 때 이 문제가 있었습니다.

내가 고친 방법은 다음과 같습니다 .

제 경우에는 table_nameProducts 이고 old_columnSKU 이고 new_columnProductNumber 였습니다.

열 이름을 바꾸는 명령이 포함된 마이그레이션 파일을 만듭니다.

 rails generate migration RenameSKUToProductNumberInProducts

db/migrate directory 에서 마이그레이션 파일을 엽니다.

 db/migrate/20201028082344_rename_sku_to_product_number_in_products.rb

열 이름을 바꾸는 명령을 추가합니다.

 class RenameSkuToProductNumberInProducts < ActiveRecord::Migration[6.0] def change # rename_column :table_name, :old_column, :new_column rename_column :products, :sku, :product_number end end

저장하고 마이그레이션 명령을 실행합니다.

 rails db:migrate

이제 스키마 파일을 살펴보고 열 이름 변경을 확인할 수 있습니다.

 db/schema.rb

열 이름 변경에 만족하지 않으면 언제든지 롤백할 수 있습니다.

 rails db:rollback

참고 : 열 이름을 호출하는 모든 위치에서 새 이름으로 수정하도록 노력하십시오.

그게 다야.

이게 도움이 되길 바란다


Promise Preston

Ruby on Rails 콘솔을 열고 다음을 입력합니다.

 ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column

rinold simon

두 가지 방법이 있습니다.

  1. 이 유형에서는 롤백할 때 자동으로 역 코드를 실행합니다.

     def change rename_column :table_name, :old_column_name, :new_column_name end
  2. rake db:migrate 때 up 메소드를 rake db:rollback 때 down 메소드를 실행합니다.

     def self.up rename_column :table_name, :old_column_name, :new_column_name end def self.down rename_column :table_name,:new_column_name,:old_column_name end

Sarwan Kumar

저는 레일 5.2를 사용 중이고 장치 사용자의 열 이름을 바꾸려고 합니다.

rename_column 비트는 저에게 효과가 있었지만 단수 :table_name 은 "사용자 테이블을 찾을 수 없습니다" 오류가 발생했습니다. 복수는 나를 위해 일했습니다.

 rails g RenameAgentinUser

그런 다음 마이그레이션 파일을 다음과 같이 변경합니다.

 rename_column :users, :agent?, :agent

어디에:에이전트? 이전 열 이름입니다.


tomb

아래 명령을 실행하여 열 이름을 업데이트하는 마이그레이션을 작성할 수 있습니다.

 rename_column :your_table_name, :hased_password, :hashed_password

또한 코드에서 이전 열 이름의 사용을 새 이름으로 업데이트해야 합니다.


Sachin Singh

업데이트 - create_table의 가까운 사촌은 기존 테이블을 변경하는 데 사용되는 change_table입니다. create_table과 유사한 방식으로 사용되지만 블록에 생성된 객체는 더 많은 트릭을 알고 있습니다. 예를 들어:

 class ChangeBadColumnNames < ActiveRecord::Migration def change change_table :your_table_name do |t| t.rename :old_column_name, :new_column_name end end end

이 방법은 다음과 같은 다른 변경 방법을 사용하는 경우 더 효율적입니다. 예를 들어 다음과 같이 추가로 수행할 수 있습니다.

 # Rename t.rename :old_column_name, :new_column_name # Add column t.string :new_column # Remove column t.remove :removing_column # Index column t.index :indexing_column #...

Hieu Pham

명령을 사용하여 마이그레이션을 생성하기만 하면 됩니다.

 rails g migration rename_hased_password

그런 다음 마이그레이션을 편집 한 후 변경 방법에 다음 줄을 추가하십시오.

 rename_column :table, :hased_password, :hashed_password

이것은 트릭을 수행해야합니다.


Ratnam Yadav

Rails 5 마이그레이션 변경 사항

예:

rails g model 학생 student_name:string age:integer

student_name 열을 이름 으로 변경하려면

참고:- rails db:migrate를 실행하지 않는 경우

다음 단계를 수행할 수 있습니다.

rails d model 학생 student_name:string age:integer

생성된 마이그레이션 파일이 제거됩니다. 이제 열 이름을 수정할 수 있습니다.

rails g model 학생 이름:문자열 나이:정수

마이그레이션한 경우(rails db:migrate) 다음 옵션을 사용하여 열 이름 변경

rails g 마이그레이션 RemoveStudentNameFromStudent student_name:string

rails g 마이그레이션 AddNameToStudent 이름:문자열


Prasanth_Rubyist

rails g migration migrationName

따라서 생성된 마이그레이션으로 이동하여 다음을 추가합니다.

 rename_column :table, :old_column, :new_column

방법에


Sara Lins

먼저 실행해야 합니다.

 rails g migration create_new_column_in_tablename new_column:datatype rails g migration remove_column_in_tablename old_column:datatype

그런 다음 db/migration을 확인해야 합니다. 모든 세부 정보가 올바른 경우 실행해야 하는 nem 마이그레이션의 세부 정보를 확인할 수 있습니다.

 rails db:migrate

Saman

출처 : http:www.stackoverflow.com/questions/1992019/rails-how-can-i-rename-a-database-column-in-a-ruby-on-rails-migration

반응형