Рельсы:Невозможно добавить параметры :precision или :scale с помощью 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.

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

Другие советы

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

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

пропуск :decimal (который уже был) и :precision (который уже был 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