Мне страшно назвать и понять, что в моем приложении Rails есть лучший набор имен для моих моделей.
Можно ли использовать миграцию для переименования модели и ее соответствующей таблицы?
Вот пример:
class RenameOldTableToNewTable < ActiveRecord::Migration
def self.up
rename_table :old_table_name, :new_table_name
end
def self.down
rename_table :new_table_name, :old_table_name
end
end
Мне пришлось перейти и переименовать файл объявления модели вручную.
Edit:
В Rails 3.1 и 4 ActiveRecord::Migration::CommandRecorder
знает, как отменить переименование переименования, так что вы можете сделать это:
class RenameOldTableToNewTable < ActiveRecord::Migration
def change
rename_table :old_table_name, :new_table_name
end
end
(Вам все равно придется просматривать и вручную переименовывать свои файлы.)
В Rails 4 все, что мне нужно было сделать, это изменение def
def change
rename_table :old_table_name, :new_table_name
end
И все мои индексы позаботились обо мне. Мне не нужно было вручную обновлять индексы, удаляя старые и добавляя новые.
И он работает, используя изменение для перехода вверх или вниз по отношению к индексам.
Другие ответы и комментарии охватывают переименование таблицы, переименование файлов и grepping через ваш код.
Я хотел бы добавить еще несколько оговорок:
Позвольте использовать реальный пример, с которым я столкнулся сегодня: переименование модели из "Торговец" в "Бизнес".
Вам также нужно заменить индексы:
class RenameOldTableToNewTable< ActiveRecord:Migration
def self.up
remove_index :old_table_name, :column_name
rename_table :old_table_name, :new_table_name
add_index :new_table_name, :column_name
end
def self.down
remove_index :new_table_name, :column_name
rename_table :new_table_name, :old_table_name
add_index :old_table_name, :column_name
end
end
И переименуйте свои файлы и т.д., как описано ниже.
Смотрите: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Удостоверьтесь, что вы можете откат и перемотка вперед после записи этой миграции. Это может стать сложным, если вы получите что-то не так и застряли в миграции, которая пытается создать то, что больше не существует. Лучше всего удалите всю базу данных и начните снова, если вы не сможете откат. Поэтому имейте в виду, что вам, возможно, понадобится что-то сделать.
Также: проверьте schema_db для любых соответствующих имен столбцов в других таблицах, определенных has_ или belongs_to или что-то в этом роде. Возможно, вам также придется отредактировать их.
И, наконец, делать это без набора регрессионных тестов будет гайкой.
rake db:migrate
, произойдет сбой. Вы могли бы вернуться и изменить эти имена в процессе миграции, но это может стать грязным. Возможно, вам лучше создать совершенно новую модель, чем переименовывать ее.