source

마이그레이션을 통해 열에 기본값 추가

factcode 2023. 6. 18. 16:22
반응형

마이그레이션을 통해 열에 기본값 추가

마이그레이션을 통해 이미 존재하는 열에 기본값을 추가하려면 어떻게 해야 합니까?

제가 찾을 수 있는 모든 문서에는 열이 존재하지 않지만 이 경우에는 존재하는 방법이 나와 있습니다.

다음은 이 작업을 수행하는 방법입니다.

change_column :users, :admin, :boolean, :default => false

하지만 Postgre와 같은 일부 데이터베이스는SQL에서는 이전에 만든 행에 대한 필드를 업데이트하지 않으므로 마이그레이션할 때도 수동으로 필드를 업데이트해야 합니다.

change_column_default :employees, :foreign, false

레일 4+경우,

def change
  change_column_default :table, :column, value
end

사용.def change즉, 되돌릴 수 있는 마이그레이션을 작성해야 합니다.그리고.change_column되돌릴 수 없습니다.올라갈 수는 있지만 내려갈 수는 없다, 왜냐하면.change_column되돌릴 수 없습니다.

대신, 몇 개의 추가 라인일 수도 있지만, 당신은 사용해야 합니다.def up그리고.def down

따라서 기본값이 없는 열이 있는 경우에는 이 작업을 수행하여 기본값을 참조하십시오.

def up
  change_column :users, :admin, :boolean, default: false
end

def down
  change_column :users, :admin, :boolean, default: nil
end

또는 기존 열의 기본값을 변경하려는 경우.

def up
  change_column :users, :admin, :boolean, default: false
end

def down
  change_column :users, :admin, :boolean, default: true
end

**레일 4.X +**

Rails 4 이후에는 기본값이 있는 테이블에 열을 추가하는 마이그레이션을 생성할 수 없습니다. 다음 단계에서는 기본값이 true 또는 false인 기존 테이블에 새 열을 추가합니다.

명령줄에서 마이그레이션을 실행하여 새 열 추가

$ rails generate migration add_columnname_to_tablename columnname:boolean

위의 명령을 사용하면 테이블에 새 열이 추가됩니다.

생성된 새 마이그레이션 파일을 편집하여 새 열 값을 TRUE/FALSE로 설정합니다.

class AddColumnnameToTablename < ActiveRecord::Migration
  def change
    add_column :table_name, :column_name, :boolean, default: false
  end
end

**3. 응용프로그램 데이터베이스 테이블을 변경하려면 터미널에서 다음 명령을 실행합니다.**

$ rake db:migrate

실행:

rails generate migration add_column_to_table column:boolean

다음 마이그레이션이 생성됩니다.

class AddColumnToTable < ActiveRecord::Migration
  def change
    add_column :table, :column, :boolean
  end
end

기본값 추가 설정:default => 1

add_column :table, :column, :column, :default => 1

실행:

갈퀴 db:갈퀴

다음과 같은 작업을 수행할 수 있습니다.

class Profile < ActiveRecord::Base
  before_save :set_default_val

  def set_default_val
    self.send_updates = 'val' unless self.send_updates
  end
end

편집: ...하지만 분명히 이것은 루키의 실수입니다!

언급URL : https://stackoverflow.com/questions/7098602/add-a-default-value-to-a-column-through-a-migration

반응형