반응형
Rails 마이그레이션 : 열의 기본 설정 실행 취소
이 예제와 같이 열의 기본 설정을 설정하는 Rails 마이그레이션이 문제가 있습니다.
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
나중에 마이그레이션 할 때 기본 설정을 삭제하고 싶습니다. 레일 마이그레이션을 사용하여 어떻게 설정합니까?
현재 해결 방법은 다음과 같이 rails 마이그레이션에서 사용자 지정 sql 명령을 실행하는 것입니다.
def self.up
execute 'alter table column_name alter bought_at drop default'
end
그러나 기본 데이터베이스가이 명령을 해석하는 방법에 따라 달라지기 때문에이 방법이 마음에 들지 않습니다. 데이터베이스가 변경되면이 쿼리가 더 이상 작동하지 않아 마이그레이션이 중단 될 수 있습니다. 그렇다면 레일의 기둥에 대한 기본 설정 실행 취소를 표현하는 방법이 있습니까?
레일 5+
def change
change_column_default( :table_name, :column_name, from: nil, to: false )
end
레일 3 및 레일 4
def up
change_column_default( :table_name, :column_name, nil )
end
def down
change_column_default( :table_name, :column_name, false )
end
소리 와 함께 당신처럼 옳은 일을하고있는 당신의 워드 프로세서는 지적과 같이, '실행'
change_column_default(table_name, column_name, default)
열의 새 기본값을 설정합니다. 기본값을 NULL로 설정하려면 운이 좋지 않습니다. 적절한 SQL 문을 직접 DatabaseStatements # execute해야합니다. 예
change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
다음 스 니펫은 NULL
열 을 만드는 데 사용 NOT NULL
하지만 DEFAULT
스키마 수준 에서는 건너 뜁니다 .
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end
레일 4
change_column :courses, :name, :string, limit: 100, null: false
참고 URL : https://stackoverflow.com/questions/887246/rails-migrations-undo-default-setting-for-a-column
반응형
'development' 카테고리의 다른 글
자체 언어로 컴파일러 작성 (0) | 2020.05.12 |
---|---|
WPF에서 컨트롤 템플릿과 DataTemplate의 차이점 (0) | 2020.05.12 |
규칙 엔진을 구현하는 방법? (0) | 2020.05.12 |
PHP 경고 : POST 컨텐츠 길이 (8978294 바이트)가 0 행의 알 수 없음의 8388608 바이트 제한을 초과합니다. (0) | 2020.05.12 |
Jenkins에서 작업을 어떻게 복제합니까? (0) | 2020.05.12 |