Rails: Не удается добавить: точность или: масштабировать параметры с change_column в миграции? - PullRequest
18 голосов
/ 16 марта 2010

Это, кажется, уже задавали: десятичная точность рельсов и масштаб

Но при запуске миграции 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"

У кого-нибудь еще есть эта проблема?

Спасибо

Josh

Ответы [ 4 ]

34 голосов
/ 18 апреля 2011

Была связанная (но не та же) проблема. Я просто изменял масштаб, поэтому при изменении масштаба вам нужна полная строка:

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

Пропуск: decimal (который уже был) и: precision (который уже был 10) приведет к сбою миграции.

6 голосов
/ 03 апреля 2010

не работает для SQLite3

Для этого простого тестового приложения, которое я запускаю, у меня есть настройка SQLite3. По-видимому, SQLite3 не полагается на объявления типов столбцов и является более динамичным, вместо этого просматривая содержимое столбца - как здесь было сказано:

Изменить тип столбца в sqlite3

Я не проверял это, но я уверен, что именно поэтому схема не была изменена, потому что change_column ничего не переводит в SQLite3.

Спасибо за ответы, ребята.

1 голос
/ 16 марта 2010

Удалить и восстановить db\schema.rb файл.

rake db:schema:dump
0 голосов
/ 17 марта 2010

Взломать, но он должен получить вас, куда вам нужно идти:

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