Aqui está o que eu faria:
Crie uma migração para alterar o nome da tabela (nível do banco de dados). Presumo que sua velha mesa se chame corpo . O conteúdo da migração será:
class RenameCorpsToStores < ActiveRecord::Migration
def change
rename_table :corps, :stores
end
end
Altere o nome do arquivo do modelo, a definição da classe do modelo e as associações do modelo:
- Renomear arquivo:
corp.rb
->store.rb
- Código de
store.rb
: Mudança class Corp
paraclass Store
- Renomeie todas as associações de modelo como
has_many :corps
->has_many :stores
Altere o nome do arquivo do controlador e a definição da classe do controlador:
- Renomear arquivo:
corps_controller.rb
->stores_controller.rb
- Código de
stores_controller.rb
: Mudança class CorpsController
paraclass StoresController
Renomear pastas de visualizações. De corps
a stores
.
Faça as mudanças necessárias nos caminhos do config/routes.rb
arquivo, como resources :corps
-> resources :stores
, e certifique-se de que todas as referências no código mudem de corps para store (corps_path, ...)
Lembre-se de executar a migração :)
Se o anterior não for possível, tente excluir o db / schema.rb e execute:
$ rake db:drop db:create db:migrate
find -name "oldname_on_singular?*
para obter uma lista de arquivos para renomear. Então copio no calc, colo duas vezes na segunda e na terceira coluna. Na primeira coluna adiciono o comando renomear e na última coluna altero para o novo nome, algo como:git mv ./spec/views/oldname ./spec/views/new name
Além de resposta Nobita você semelhante necessário alterar as teste e auxiliares definições de classes e nomes de arquivo para
corps
astore
. Mais importante que você deve mudarcorps
astore
sua config / routes.rb arquivoPortanto, no total, você está fazendo alterações nos arquivos do controlador, do modelo associado, das visualizações, dos auxiliares, dos testes e das rotas.
Acho que o que você viu sugerido com
destroy
&generate
é uma opção melhor. Eu respondi como fazer isso aqui: Rails: renomeando um controlller e o modelo correspondentefonte
Você pode tentar a gem Rails Refactor também, uma ferramenta de linha de comando para refatores simples como renomear modelo e controlador para projetos Rails
Uso:
fonte
Além da resposta de Nobita (que eu comentaria se tivesse representante suficiente), se você estiver se sentindo corajoso, as alterações nos nomes dos arquivos e referências ao modelo em seu código podem ser automatizadas de alguma forma. Por exemplo, para alterar as referências em seu código, você pode usar
Singular, menos e mayus:
Plural, menos e mayus (o singular substitui o plural se o plural só precisar e o caractere s no final):
Renomear arquivos:
E há um utilitário chamado rename em alguns sabores * nix (incluindo Slackware) que o ajudará a renomear os arquivos:
No entanto, verifique se renomear é o que você pensa. Conheci outras distribuições como o Ubuntu que vêm com um utilitário diferente com o mesmo nome (consulte /unix/78621/find-rename-command- não funciona ). No Ubuntu, você faria isso:
Note que você deseja evitar renomear qualquer arquivo em db / exceto possivelmente em seu arquivo seed.rb, então você provavelmente deseja excluir este diretório e fazer quaisquer mudanças manualmente.
fonte
Outra coisa importante é que você precisa atualizar as associações de modelo, o que você terá que fazer se renomear manualmente ou destruir e gerar o recurso (uma vez que existem nos outros modelos). Você pode executar uma migração para alterar os nomes das colunas das chaves estrangeiras no banco de dados e alterar todas as referências a essas chaves estrangeiras no código:
ou defina uma chave estrangeira personalizada ao declarar a associação que usa a chave estrangeira antiga:
Além disso, se o seu recurso inclui imagens, elas geralmente são armazenadas em um diretório que inclui o nome do recurso, mas (com carrierwave, pelo menos) assim que o nome do recurso for alterado, elas serão referenciadas incorretamente (arquivo existe em '/ uploads / old / image / 1 / pic.jpg 'mas é procurado em' uploads / new / ... '), então você terá que excluir e reenviar as imagens, movê-las para o novo caminho ou talvez alterar onde elas' está sendo procurado.
fonte
E se você tiver testes de modelo, você precisa mudar:
Renomeação de arquivo: corp_test.rb -> store_test.rb (também para testes de controlador, testes de integração, fixture, etc.)
Código de store_test.rb: Altere a classe CorpTest para a classe StoreTest.
E todas as referências de corp no controlador, modelo, integração, testes de fixação.
fonte
Como alguém que acabou de concluir esse processo doloroso, a etapa MAIS importante é construir TESTES suficientes para verificar o máximo de funcionalidade possível. Eles devem abranger não apenas o modelo / controlador que você planeja renomear, mas também todos os outros modelos / controladores / partes de visualizações. De qualquer forma, é uma boa (ou talvez até obrigatória) prática.
Faça isso etapas por iterações; às vezes, você precisa retornar às etapas algumas vezes (5 e mais) para descobrir arquivos adicionais que precisam ser alterados. E agora para as etapas de renomeação:
Corps/Corp
aStores/Store
nadb/migrate
pastaTente executar:
rake db: drop: all
rake db: criar
rake db: migrate
Altere o conteúdo do
db/seeds.rb
arquivo.rake db:seed --trace
(nesta etapa, você pode precisar alterar alguns outros arquivos de modelo / controlador.)test/fixtures
arquivos. você pode precisar alterar não apenas corps.yml, mas outros arquivos relacionados (alguns arquivos podem incluir corp_id).TESTOPTS="--seed=1981"
ou qualquer outro número)fonte
para o controlador, você terá que fazer alterações nos seguintes lugares se estiver fazendo isso manualmente :
para modelo, a resposta de Nobita é muito boa
fonte