Sou péssimo em nomear e percebo que há um conjunto melhor de nomes para meus modelos no meu aplicativo Rails.
Existe alguma maneira de usar uma migração para renomear um modelo e sua tabela correspondente?
ruby-on-rails
migration
rails-activerecord
Somente leitura
fonte
fonte
rake db:migrate
, ele falha. Você pode voltar e alterar esses nomes na migração, mas isso ficará confuso. É melhor criar um modelo inteiramente novo do que renomeá-lo.rake db:schema:load
?rake db:migrate
para configurar um banco de dados a partir do zero é desencorajado ativamente, exatamente por causa das preocupações apontadas por andrew.Respostas:
Aqui está um exemplo:
Eu tive que mudar o nome do arquivo de declaração do modelo manualmente.
Editar:
No Rails 3.1 e 4,
ActiveRecord::Migration::CommandRecorder
sabe como reverter as migrações rename_table, para que você possa fazer isso:(Você ainda precisa passar por e renomear seus arquivos manualmente.)
fonte
git grep -i activit
é muito revelador.No Rails 4, tudo o que eu precisava fazer era a alteração da definição
E todos os meus índices foram resolvidos por mim. Não precisei atualizar manualmente os índices removendo os antigos e adicionando novos.
E funciona usando a alteração para subir ou descer em relação aos índices também.
fonte
As outras respostas e comentários abordaram a renomeação de tabelas, renomeação de arquivos e grepping através do seu código.
Gostaria de adicionar mais algumas advertências:
Vamos usar um exemplo do mundo real que eu enfrentei hoje: renomear um modelo de 'Merchant' para 'Business'.
fonte
Você também precisa substituir seus índices:
E renomeie seus arquivos etc, manualmente, como outras respostas aqui descrevem.
Veja: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Certifique-se de poder reverter e avançar depois de escrever essa migração. Pode ser complicado se você errar algo e ficar preso a uma migração que tenta efetuar algo que não existe mais. Melhor lixeira para todo o banco de dados e inicie novamente se você não puder reverter. Portanto, esteja ciente de que pode ser necessário fazer o backup de algo.
Além disso: verifique schema_db em busca de nomes de colunas relevantes em outras tabelas definidas por um has_ ou pertence_ a ou algo assim. Você provavelmente precisará editá-los também.
E, finalmente, fazer isso sem um conjunto de testes de regressão seria maluco.
fonte
Você pode executar este comando: rails g migration rename_ {old_table_name} para {new_table_name}
depois de editar o arquivo e adicionar esse código na alteração de método
rename_table: {old_table_name},: {new_table_name}
fonte