[ruby-on-rails] 마이그레이션을 통해 열에 기본값 추가

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

내가 찾을 수있는 모든 문서는 열이 존재하지 않지만이 경우에는 수행하는 방법을 보여줍니다.



답변

수행 방법은 다음과 같습니다.

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

그러나 PostgreSQL과 같은 일부 데이터베이스는 이전에 작성된 행의 필드를 업데이트하지 않으므로 마이그레이션시 필드를 수동으로 업데이트해야합니다.


답변

change_column_default :employees, :foreign, false


답변

들어 레일 4+ 사용change_column_default

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 인 기존 테이블에 새 열을 추가합니다.

1. 명령 행에서 마이그레이션을 실행하여 새 열을 추가하십시오.

$ rails generate migration add_columnname_to_tablename columnname:boolean

위의 명령은 테이블에 새 열을 추가합니다.

2. 작성된 새 이주 파일을 편집하여 새 열 값을 TRUE / FALSE로 설정하십시오.

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

**삼. 애플리케이션 데이터베이스 테이블을 변경하려면 터미널 **에서 다음 명령을 실행하십시오.

$ 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, : boolean, : 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

편집 : …하지만 분명히 이것은 신인 실수입니다!