[RUBY-ON-RAILS] 변경 항목에 대한 마이그레이션을 레일
RUBY-ON-RAILS변경 항목에 대한 마이그레이션을 레일
우리는이 스크립트 / 마이그레이션 add_fieldname_to_tablename의 필드 이름을 생성합니다 모델에 새 열을 추가하기위한 데이터 형식 구문을.
같은 라인에, 우리는 스크립트가 / 컬럼의 데이터 유형을 변경하기위한 생성해야합니까? 아니면 내가 내 바닐라 마이그레이션에 직접 SQL을 작성해야?
나는 지금까지 날짜에서 열을 변경하고 싶습니다.
해결법
-
==============================
1.나는이 일을한다고 생각합니다.
나는이 일을한다고 생각합니다.
change_column :table_name, :column_name, :date
-
==============================
2.당신은 테이블 내에서 변경할 수있는 여러 열이있는 경우 당신은 또한 블록을 사용할 수 있습니다.
당신은 테이블 내에서 변경할 수있는 여러 열이있는 경우 당신은 또한 블록을 사용할 수 있습니다.
예:
change_table :table_name do |t| t.change :column_name, :column_type, {options} end
자세한 내용은 표 클래스에 대한 API 설명서를 참조하십시오.
-
==============================
3.이 모든 작업을 수행하는 명령 줄에서 마이그레이션을 만들 수 있는지 잘 모르는 것 같아요,하지만 당신은 새로운 이동 한 다음 편집이 TAKS을 수행 할 수있는 마이그레이션을 만들 수 있습니다.
이 모든 작업을 수행하는 명령 줄에서 마이그레이션을 만들 수 있는지 잘 모르는 것 같아요,하지만 당신은 새로운 이동 한 다음 편집이 TAKS을 수행 할 수있는 마이그레이션을 만들 수 있습니다.
TABLENAME이 테이블의 이름 인 경우, 필드 이름이 필드의 이름이며 날짜에 날짜에서 변경하려면, 당신은이 작업을 수행 할 수있는 마이그레이션을 작성할 수 있습니다.
당신이 가진 새로운 마이그레이션을 만들 수 있습니다 :
rails g migration change_data_type_for_fieldname
그런 다음 change_table 사용하여 마이그레이션을 편집 :
class ChangeDataTypeForFieldname < ActiveRecord::Migration def self.up change_table :tablename do |t| t.change :fieldname, :date end end def self.down change_table :tablename do |t| t.change :fieldname, :datetime end end end
그런 다음 마이그레이션을 실행 :
rake db:migrate
-
==============================
4.내가 이전 답변에 의해 발견으로 세 단계는 컬럼의 유형을 변경하는 데 필요한 :
내가 이전 답변에 의해 발견으로 세 단계는 컬럼의 유형을 변경하는 데 필요한 :
1 단계:
이 코드를 사용하여 새 마이그레이션 파일을 생성합니다 :
rails g migration sample_name_change_column_type
2 단계:
에 / DB / 마이그레이션 폴더 및 편집 당신이 만든 마이그레이션 파일을 이동합니다. 두 가지 해결책이 있습니다.
2.
def up change_column :table_name, :column_name, :new_type end def down change_column :table_name, :column_name, :old_type end
3 단계 :
이 명령을 수행하는 것을 잊지 마세요 :
rake db:migrate
나는 레일 4이 솔루션을 테스트 한 잘 작동합니다.
-
==============================
5.레일 가이드에서 :
레일 가이드에서 :
class ChangeTablenameFieldname < ActiveRecord::Migration[5.1] def change reversible do |dir| change_table :tablename do |t| dir.up { t.change :fieldname, :date } dir.down { t.change :fieldname, :datetime } end end end end
-
==============================
6.그냥 마이그레이션을 생성합니다 :
그냥 마이그레이션을 생성합니다 :
rails g migration change_column_to_new_from_table_name
이 같은 업데이트 마이그레이션 :
class ClassName < ActiveRecord::Migration change_table :table_name do |table| table.change :column_name, :data_type end end
그리고 마지막으로
rake db:migrate
-
==============================
7.마이그레이션을 사용하여 변경 데이터 형식으로 또 다른 방법
마이그레이션을 사용하여 변경 데이터 형식으로 또 다른 방법
1 단계: 당신은 마이그레이션을 사용하여 오류가 발생한 데이터 형식의 필드 이름을 제거해야
전의:
rails g migration RemoveFieldNameFromTableName field_name:data_type
여기에 귀하의 필드에 대한 데이터 형식을 지정하는 것을 잊지 마세요
2 단계: 지금 당신은 올바른 데이터 유형으로 필드를 추가 할 수 있습니다
전의:
rails g migration AddFieldNameToTableName field_name:data_type
사용자들은이 이제 테이블이 올바른 데이터 유형 필드에 추가합니다, 해피 루비 코딩!
-
==============================
8.이것은 모든 열의 데이터 유형은 모든 기존 데이터에 대한 암시 적 변환을 보유한다고 가정된다. 나는 기존의 데이터가하자가 문자열은 암시 적으로 새 데이터 형식으로 변환 할 수 있다고 여러 상황으로 실행했습니다,의 날짜를 가정 해 봅시다.
이것은 모든 열의 데이터 유형은 모든 기존 데이터에 대한 암시 적 변환을 보유한다고 가정된다. 나는 기존의 데이터가하자가 문자열은 암시 적으로 새 데이터 형식으로 변환 할 수 있다고 여러 상황으로 실행했습니다,의 날짜를 가정 해 봅시다.
이 상황에서, 당신이 데이터 변환과 마이그레이션을 만들 수 있습니다 알고 도움이됩니다. 개인적으로, 나는 모든 데이터베이스 스키마 후 제거 후 그들을 내 모델 파일에이 퍼팅과 같은 마이그레이션 및 안정되어있다.
/app/models/table.rb ... def string_to_date update(new_date_field: date_field.to_date) end def date_to_string update(old_date_field: date_field.to_s) end ...
def up # Add column to store converted data add_column :table_name, :new_date_field, :date # Update the all resources Table.all.each(&:string_to_date) # Remove old column remove_column :table_name, :date_field # Rename new column rename_column :table_name, :new_date_field, :date_field end # Reversed steps does allow for migration rollback def down add_column :table_name, :old_date_field, :string Table.all.each(&:date_to_string) remove_column :table_name, :date_field rename_column :table_name, :old_date_field, :date_field end
-
==============================
9.편집 기본값의 경우 완전한 답변을 :
편집 기본값의 경우 완전한 답변을 :
당신의 레일 콘솔에서 :
rails g migration MigrationName
마이그레이션의 경우 :
def change change_column :tables, :field_name, :field_type, default: value end
다음과 같이 표시됩니다
def change change_column :members, :approved, :boolean, default: true end
from https://stackoverflow.com/questions/2799774/rails-migration-for-change-column by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 만들 대 새 레일 (0) | 2020.02.15 |
---|---|
[RUBY-ON-RAILS] 루비 레일에 : 어디 전역 상수를 정의하려면? (0) | 2020.02.15 |
[RUBY-ON-RAILS] OSX의 독불 장군에 설치하지 "보석은 therubyracer -v '0.10.2'설치" (0) | 2020.02.15 |
[RUBY-ON-RAILS] 어떻게 고안과 확인 이메일을 설정합니까? (1) | 2020.02.15 |
[RUBY-ON-RAILS] 레일의 캐릭터와 텍스트 사이의 차이점? (0) | 2020.02.15 |