레일 : 추가 할 수 없음 : 정밀 또는 : 마이그레이션에서 Change_Column이있는 스케일 옵션?

StackOverflow https://stackoverflow.com/questions/2450494

문제

이것은 전에 다음과 같은 질문을받은 것 같습니다. 레일 소수 정밀도 및 규모

그러나 실행할 때 change_column 마이그레이션 :precision 또는 :scale 실제로 스키마 나 데이터베이스에 영향을 미치지 않지만 db:migrate 오류없이 실행됩니다.

마이그레이션 파일은 다음과 같습니다.

class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
  def self.up
    change_column :tags, :payback_period, :decimal, { :scale => 3, :precision => 10 }
  end

  def self.down
    change_column :tags, :payback_period, :decimal
  end
end

그러나 내 스키마 (및 데이터)는 다음과 같습니다.

t.decimal  "payback_period"

다른 사람 이이 문제가 있습니까?

감사,

조롱

도움이 되었습니까?

해결책 2

sqlite3에는 작동하지 않습니다

실행중인이 간단한 테스트 앱의 경우 SQLITE3 설정이 있습니다. 보기에, SQLITE3은 열 유형 선언에 의존하지 않습니다 그리고 여기에 우연히 발견 된 것처럼 칼럼의 콘텐츠를 대신보고 더 역동적입니다.

sqlite3에서 열의 유형을 수정하십시오

나는 그것을 테스트하지 않았지만 그게 스키마가 변경되지 않은 이유라고 확신합니다. change_column sqlite3의 어떤 것도 번역되지 않습니다.

답장을 보내 주셔서 감사합니다.

다른 팁

관련 (동일하지는 않지만) 문제가있었습니다. 나는 방금 스케일을 바꾸고 있었기 때문에 : 스케일을 변경할 때 전체 줄이 필요합니다.

change_column :something, :weight, :decimal, :precision => 10, :scale => 2

생략 : 10 진수 (이미 있었던)와 : 정밀 (이미 10 인)은 마이그레이션이 실패하게됩니다.

삭제 및 재생 db\schema.rb 파일.

rake db:schema:dump

해킹이지만 가야 할 곳을 얻을 수 있어야합니다.

class ChangePrecisionAndScaleOfPaybackPeriodInTags < ActiveRecord::Migration
  def self.up
    execute "ALTER TABLE tags CHANGE payback_period DECIMAL(3,10)"
  end

  def self.down
    change_column :tags, :payback_period, :decimal
  end
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top