hased_password
대신 hashed_password
열 이름을 잘못 지정했습니다.
마이그레이션을 사용하여 이 열의 이름을 바꾸면 데이터베이스 스키마를 어떻게 업데이트합니까?
질문자 :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의 경우:
up
및 down
방법이 여전히 적용되지만 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
대신에있어서 up
및 down
상기 섹션에 언급한다. 생성된 change
방법은 다음과 같습니다.
$ > rails g migration ChangeColumnName
그러면 다음과 유사한 마이그레이션 파일이 생성됩니다.
class ChangeColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end
제 생각에는 이 경우 rake db:rollback
을 사용한 다음 마이그레이션을 편집하고 rake db:migrate
다시 실행하는 것이 좋습니다.
그러나 손실하고 싶지 않은 열에 데이터가 있는 경우에는 rename_column
을 사용하십시오.
열이 이미 데이터로 채워져 있고 프로덕션 환경에 있는 경우 마이그레이션을 기다리는 동안 프로덕션 다운타임을 방지하기 위해 단계별 접근 방식을 권장합니다.
먼저 새 이름으로 열을 추가하고 이전 열 이름의 값으로 채우는 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
를 백그라운드에서 실행합니다.
이것이 프로세스와 조금 더 관련되어 있다는 것을 알고 있지만 프로덕션 마이그레이션에 문제가 있는 것보다 차라리 이 작업을 수행하고 싶습니다.
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Available Transformations
rename_column(table_name, column_name, new_column_name):
열의 이름을 바꾸지만 유형과 내용은 유지합니다.
아래 명령어를 실행하여 마이그레이션 파일을 생성합니다.
rails g migration ChangeHasedPasswordToHashedPassword
db/migrate
폴더에 생성된 파일에 다음과 같이 rename_column
을 작성합니다.
class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end
API에서:
rename_column(table_name, column_name, new_column_name)
열의 이름을 바꾸지만 유형과 내용은 동일하게 유지됩니다.
코드가 다른 코드와 공유되지 않는 경우 가장 좋은 방법은 rake db:rollback
한 다음 마이그레이션에서 열 이름을 편집하고 rake db:migrate
입니다. 그게 다야
그리고 다른 마이그레이션을 작성하여 열의 이름을 바꿀 수 있습니다.
def change rename_column :table_name, :old_name, :new_name end
그게 다야.
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 - 마이그레이션 또는 활성 레코드 마이그레이션을 참조 하세요.
대안 옵션으로, 마이그레이션 아이디어와 결혼하지 않은 경우 Datamapper 스타일로 이름 변경을 자동으로 처리하는 ActiveRecord에 대한 매력적인 보석이 있습니다. 모델의 열 이름을 변경하고 model.rb의 맨 아래에 Model.auto_upgrade!를 넣어야 합니다. 데이터베이스는 즉석에서 업데이트됩니다.
https://github.com/DAddYE/mini_record
참고: 충돌을 방지하려면 db/schema.rb 를 nuke해야 합니다.
아직 베타 단계에 있으며 모든 사람이 사용할 수 있는 것은 아니지만 여전히 매력적인 선택입니다(현재 문제 없이 두 개의 중요하지 않은 프로덕션 앱에서 사용 중입니다).
열 이름을 전환해야 하는 경우 중복 열 이름 오류 를 방지하기 위해 자리 표시자를 만들어야 합니다. 다음은 예입니다.
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
현재 데이터가 중요하지 않은 경우 다음을 사용하여 원래 마이그레이션을 중단할 수 있습니다.
rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE'
따옴표 없이 원래 마이그레이션을 변경하고 다음을 수행하여 업 마이그레이션을 다시 실행합니다.
rake db:migrate
새 마이그레이션을 만들고 블록에서 rename_column
같이 rename_column을 사용하기만 하면 됩니다.
rename_column :your_table_name, :hased_password, :hashed_password
Ruby on Rails 4의 경우:
def change rename_column :table_name, :column_name_old, :column_name_new end
수동으로 아래 방법을 사용할 수 있습니다.
다음과 같이 마이그레이션을 수동으로 편집할 수 있습니다.
app/db/migrate/xxxxxxxxx_migration_file.rb
열기
hased_password
를 hashed_password
업데이트
아래 명령을 실행
$> rake db:migrate:down VERSION=xxxxxxxxx
그런 다음 마이그레이션이 제거됩니다.
$> rake db:migrate:up VERSION=xxxxxxxxx
업데이트된 변경 사항과 함께 마이그레이션이 추가됩니다.
마이그레이션 파일 생성:
rails g migration FixName
# db/migrate/xxxxxxxxxx.rb 생성
원하는 대로 마이그레이션을 수정하세요.
class FixName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end
rails g migration ChangesNameInUsers
(또는 원하는 이름)를 실행합니다.
방금 생성된 마이그레이션 파일을 열고 메서드에 다음 줄을 추가합니다( def change
와 end
사이).
rename_column :table_name, :the_name_you_want_to_change, :the_new_name
파일을 저장하고 콘솔에서 rake db:migrate
데이터베이스에서 이름이 실제로 변경되었는지 확인 schema.db
도움이 되었기를 바랍니다 :)
키스 하자. 세 가지 간단한 단계만 거치면 됩니다. 다음은 Rails 5.2에서 작동합니다.
rails g migration RenameNameToFullNameInStudents
rails g RenameOldFieldToNewFieldInTableName
- 이렇게 하면 나중에 코드 기반의 유지 관리자에게 완벽하게 명확해집니다. (테이블 이름에 복수형 사용).
# 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
rake db:migrate
그리고 당신은 경주를 떠났습니다!
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
$: 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
def change rename_column :table_name, :old_column_name, :new_column_name end
PostgreSQL 데이터베이스 로 Rails 6 애플리케이션에서 작업할 때 이 문제가 있었습니다.
내가 고친 방법은 다음과 같습니다 .
제 경우에는 table_name 이 Products
이고 old_column 이 SKU
이고 new_column 이 ProductNumber
였습니다.
열 이름을 바꾸는 명령이 포함된 마이그레이션 파일을 만듭니다.
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
참고 : 열 이름을 호출하는 모든 위치에서 새 이름으로 수정하도록 노력하십시오.
그게 다야.
이게 도움이 되길 바란다
Ruby on Rails 콘솔을 열고 다음을 입력합니다.
ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column
두 가지 방법이 있습니다.
이 유형에서는 롤백할 때 자동으로 역 코드를 실행합니다.
def change rename_column :table_name, :old_column_name, :new_column_name end
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
저는 레일 5.2를 사용 중이고 장치 사용자의 열 이름을 바꾸려고 합니다.
rename_column
비트는 저에게 효과가 있었지만 단수 :table_name
은 "사용자 테이블을 찾을 수 없습니다" 오류가 발생했습니다. 복수는 나를 위해 일했습니다.
rails g RenameAgentinUser
그런 다음 마이그레이션 파일을 다음과 같이 변경합니다.
rename_column :users, :agent?, :agent
어디에:에이전트? 이전 열 이름입니다.
아래 명령을 실행하여 열 이름을 업데이트하는 마이그레이션을 작성할 수 있습니다.
rename_column :your_table_name, :hased_password, :hashed_password
또한 코드에서 이전 열 이름의 사용을 새 이름으로 업데이트해야 합니다.
업데이트 - 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 #...
명령을 사용하여 마이그레이션을 생성하기만 하면 됩니다.
rails g migration rename_hased_password
그런 다음 마이그레이션을 편집 한 후 변경 방법에 다음 줄을 추가하십시오.
rename_column :table, :hased_password, :hashed_password
이것은 트릭을 수행해야합니다.
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 이름:문자열
rails g migration migrationName
따라서 생성된 마이그레이션으로 이동하여 다음을 추가합니다.
rename_column :table, :old_column, :new_column
방법에
먼저 실행해야 합니다.
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
출처 : http:www.stackoverflow.com/questions/1992019/rails-how-can-i-rename-a-database-column-in-a-ruby-on-rails-migration
전송 보안이 일반 텍스트 HTTP를 차단했습니다. (0) | 2022.02.27 |
---|---|
개체 이름 앞에 단일 및 이중 밑줄의 의미는 무엇입니까? (0) | 2022.02.27 |
잠재적으로 위험한 Request.Form 값이 클라이언트에서 감지되었습니다. (0) | 2022.02.27 |
Git 푸시를 올바르게 강제하려면 어떻게 해야 합니까? (0) | 2022.02.27 |
CSS를 사용하는 모든 브라우저의 "div" 요소를 수직으로 중앙에 맞추려면 어떻게 해야 합니까? (0) | 2022.02.27 |