Миграция Rails: измените тип столбца и обновите существующие данные - PullRequest
0 голосов
/ 21 февраля 2019

В моем Rails-проекте у меня есть объект модели, в котором есть существующий столбец с именем «постоянный» типа «логический».Мне нужно изменить этот столбец на Integer с возможными значениями 1, 2, 3. Могу ли я обновить существующие данные в БД (через миграцию рельсов) так, чтобы все строки с «постоянным» как ложнымизменено на 1, и все строки с «постоянным» как истиной заменены на 2.

1 Ответ

0 голосов
/ 21 февраля 2019

Я использую Postgres.Не уверен, работает ли это решение для других баз данных. people таблица, используемая в качестве примера - не забудьте изменить имя таблицы на свое.

  def up
    change_column :people, :permanent, 'integer USING CAST(permanent AS integer)'
    Person.connection.execute("UPDATE people SET permanent = CASE permanent WHEN 0 THEN 1 WHEN 1 THEN 2 END")
  end

  def down
    Person.connection.execute("UPDATE people SET permanent = CASE permanent WHEN 1 THEN 0 WHEN 2 THEN 1 END")
    change_column :people, :permanent, 'boolean USING CAST(permanent AS boolean)'
  end
...