2016-03-10 3 views
2

Я создал базу данных и уже ввел около 30-40 записей в базу данных, но произошла ошибка, и я случайно установил некоторые столбцы базы данных как строки, когда мне нужно они должны быть десятичными, чтобы выполнять операции над ними.Ruby on Rails Migration Convert from String To Decimal

Чтобы изменить базу данных, я создал файл миграции, который включает это.

class ChangeOddsAndUnitsColumn < ActiveRecord::Migration 
    def change 
    change_column :bets, :units_placed, :decimal 
    change_column :bets, :odds, :decimal 
    end 
end 

Однако, когда я бегу rake db:migrate я получаю следующую ошибку

PG::DatatypeMismatch: ERROR: column "units_placed" cannot be cast automatically to type numeric 

Значения в каждом столбце уже десятичных чисел, но я не могу понять, как преобразовать их в десятичную типа из строка.

ответ

1

Что вы делаете, это атомная операция, в которой сначала удаляется столбец, который вы не будете использовать. Затем создайте столбец типа decimal. Наконец, обновите таблицу и назначьте значения. Если вы не хотите потерять информацию, вы должны поддерживать ее с помощью типов преобразования процедур SQL. Надеюсь, вы послужили ориентиром. Приветствую.

Lo que debes hacer es una operación atómica, donde primero исключает la columna que no vas a utilizar. Luego crear la columna de tipo decimal. Por último actualizar la tabla y asignarle valores. En caso de que no quieras perder la información deberías respaldarla para luego a través de un processimiento SQL actualicen convirtiendo los tipos. Espero que te haya servido como una orientación. Saludos.

class ChangeOddsAndUnitsColumn < ActiveRecord::Migration 
    def up 
    change_table :bets do |t| 
     t.decimal :units_placed, precision: 16, scale: 2 
    end 
    Bets.update_all ["units_placed = ?", 0.0] 
    end 

    def down 
    remove_column :bets, :units_placed 
    end 
end 
+3

Пожалуйста, используйте английский язык на всем протяжении этого сайта. || Por favor, usarlo Inglés en todo este sitio. – mudasobwa