Rails Migration Decimal Column: default => 0, сбросив точность MySQL до 0 - PullRequest
5 голосов
/ 16 декабря 2011

Я использую Rails 3.0.3 (не спрашиваю), и когда я запускаю миграцию для таблицы с десятичным столбцом и устанавливаю: default => 0, это заново устанавливает масштаб и точность столбца (10,0) .

def self.up
 create_table :courses do |t|
  t.integer :user_id
  t.string :name
  t.decimal :distance, :precision => 5, :scale => 2, :default => 0
  t.text :notes

  t.timestamps
 end
end

Когда я удаляю опцию: default => 0 из миграции, масштаб и точность столбца верны: (5,2)

Я попытался запустить миграцию change_column с установленным only: default =>: 0, но масштаб и точность столбца были сброшены на (10,0)

change_column :courses, :distance, :decimal, :default => 0.0

Я знаю, что могу зайти в MySQL и исправить точность и масштаб столбца, но мне интересно, что я делаю не так или это ошибка?

Google не раскрывает информацию, поэтому я думаю, что я делаю что-то не так.

Ответы [ 4 ]

6 голосов
/ 05 июля 2012

Попробуйте это: t.decimal :distance, :precision => 5, :scale => 2, :default => 0.00

2 голосов
/ 16 декабря 2011

Я тоже застрял на этом, и я не могу найти решение.В конце концов мне пришлось пойти в MySQL и изменить требуемую точность, масштаб и значение по умолчанию, я использовал это с здесь с несколькими изменениями

mysql> ALTER TABLE question ADD (price INTEGER);
mysql> ALTER TABLE question DROP price;
mysql> ALTER TABLE question ADD (frig DECIMAL(5,2));
mysql> ALTER TABLE question CHANGE frig price DECIMAL(5,2);
mysql> ALTER TABLE question ALTER status SET DEFAULT '0';
mysql> ALTER TABLE question MODIFY price INTEGER;

Также попробуйте: default => 0.0 #обратите внимание на 0.0, так как значение по умолчанию должно быть в указанном типе данных, то есть десятичном

Надеюсь, это поможет.

1 голос
/ 13 декабря 2012

Вы также можете сделать

def change
    change_column :courses , :distance, :decimal, :precision => 5, :scale => 2, :null => false, :default => '0'
end
0 голосов
/ 25 мая 2017

Я просто пытаюсь это прямо сейчас и, кажется, работает.

Миграции активных записей

class ChangeVisitratioFormatInCampaigns < ActiveRecord::Migration[5.0]
  def change
    reversible do |dir|
        change_table :campaigns do |t|
            dir.up { t.change :visitratio, :decimal, :precision => 5, :scale => 4, :default => 1 }
            dir.down { t.change :visitratio, :integer }
        end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...