переименование столбца в Rails - PullRequest
9 голосов
/ 17 февраля 2010

Можно ли переименовать столбец с помощью такой команды:

script/generate migration AddColumnToTable column:type

? Спасибо.

Ответы [ 3 ]

17 голосов
/ 17 февраля 2010

Rails действительно имеет команду переноса в ActiveRecord ConnectionAdapter, которая называется rename_column. Вы можете сгенерировать миграцию, а затем написать код самостоятельно. пример (MySQL):

script/generate migration rename_my_column_by_hand

Затем отредактируйте созданный файл:

class RenameMyColumnByHand < ActiveRecord::Migration
  def self.up
    rename_column :my_table, :old_name, :new_name
  end

  def self.down
    rename_column :my_table, :new_name, :old_name
  end
end

Он выполняет SQL как:

ALTER TABLE my_table CHANGE old_name new_name BIGINT;

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

2 голосов
/ 17 февраля 2010

Отличный вопрос. Ответ, к сожалению, нет. См. Rails 2.3.5 исходный код:

lib/rails_generator/generators/components/migration/migration_generator.rb

Единственными ключевыми словами, которые распознаются генератором миграции, являются add, remove и to / from.

1 голос
/ 17 февраля 2010

Я использую немного хитрости здесь. Скажем, я хочу изменить столбец foo на bar.

Создайте миграцию, выполнив следующие шаги

  • Добавить временный столбец temp_foo
  • Обновить все записи, сохранив значение foo в temp_foo
  • Добавить столбец столбца
  • Обновить все записи, сохранив значение temp_foo в строке
  • Drop column foo
  • Удалить столбец temp_foo

Это очень хрупкий. Если один шаг не удастся, вы можете потерять данные ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...