복붙노트

[RUBY-ON-RAILS] 변경 항목에 대한 마이그레이션을 레일

RUBY-ON-RAILS

변경 항목에 대한 마이그레이션을 레일

우리는이 스크립트 / 마이그레이션 add_fieldname_to_tablename의 필드 이름을 생성합니다 모델에 새 열을 추가하기위한 데이터 형식 구문을.

같은 라인에, 우리는 스크립트가 / 컬럼의 데이터 유형을 변경하기위한 생성해야합니까? 아니면 내가 내 바닐라 마이그레이션에 직접 SQL을 작성해야?

나는 지금까지 날짜에서 열을 변경하고 싶습니다.

해결법

  1. ==============================

    1.나는이 일을한다고 생각합니다.

    나는이 일을한다고 생각합니다.

    change_column :table_name, :column_name, :date
    
  2. ==============================

    2.당신은 테이블 내에서 변경할 수있는 여러 열이있는 경우 당신은 또한 블록을 사용할 수 있습니다.

    당신은 테이블 내에서 변경할 수있는 여러 열이있는 경우 당신은 또한 블록을 사용할 수 있습니다.

    예:

    change_table :table_name do |t|
      t.change :column_name, :column_type, {options}
    end
    

    자세한 내용은 표 클래스에 대한 API 설명서를 참조하십시오.

  3. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    7.마이그레이션을 사용하여 변경 데이터 형식으로 또 다른 방법

    마이그레이션을 사용하여 변경 데이터 형식으로 또 다른 방법

    1 단계:   당신은 마이그레이션을 사용하여 오류가 발생한 데이터 형식의 필드 이름을 제거해야

    전의:

    rails g migration RemoveFieldNameFromTableName field_name:data_type
    

    여기에 귀하의 필드에 대한 데이터 형식을 지정하는 것을 잊지 마세요

    2 단계:   지금 당신은 올바른 데이터 유형으로 필드를 추가 할 수 있습니다

    전의:

    rails g migration AddFieldNameToTableName field_name:data_type
    

    사용자들은이 이제 테이블이 올바른 데이터 유형 필드에 추가합니다, 해피 루비 코딩!

  8. ==============================

    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. ==============================

    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
    
  10. from https://stackoverflow.com/questions/2799774/rails-migration-for-change-column by cc-by-sa and MIT license