Pergunta

Eu tenho 4 migrações relacionadas em meu aplicativo Rails:

As 3 primeiras migrações criar uma tabela cada um na self.up e e deixa-los em seus respectivos métodos self.down.

4ª migração executa uma tarefa rake que carrega os dados para todos os três (em self.up). Estou pensando o que colocar no self.down desta migração para excluir as linhas a partir dos 3 mesas?

Am I fazendo errado? Provavelmente deveria ter criado uma migração onde eu criar 3 tabelas e carregar os dados no self.up e apenas uma gota todas as três tabelas no método self.down?

Foi útil?

Solução

Esta é errado!

As migrações deve ser usado apenas para migrar seus dados Modelo não o seu Data .

Rails 2.3.4 acrescenta 'sementes'. Este é um arquivo em db / seeds.rb contém código Ruby para "bootstrap seu banco de dados. Esta é uma ótima maneira de criar conteúdo semi-estáticos para o seu banco de dados como categorias, tabelas de consulta ou contas de usuário.

Você pode então carregar os dados de sementes com uma tarefa simples ancinho

rake db:seed

Outras dicas

Não há realmente uma maneira certa ou errada de fazer isso. Baseado no que você fez, o 4º migração deve apenas descarregar os dados em seu método para baixo. Cada para baixo só deve desfazer as ações do up.

Carregamento de dados na migração que cria a tabela é, certamente, não é obrigatório. Se você tem 3 mesas que criam has_many ou belongs_to relações então não faria sentido colocar os dados em uma migração em separado para que você possa criar os relacionamentos e, em seguida, usá-los em sua carga de dados.

Tudo isso de lado, se você tem uma tarefa rake com dados de carga, por que se preocupar com uma migração que corre que tarefa rake? Basta fazer correr o componente de tarefa rake de sua instalação, ou simplesmente usar o seu tarefa rake para carregar ou descarregar alguns dados de demonstração.

Geralmente eu manter meu esquema migrações focado, e eu ia colocar qualquer carregamento de dados em uma tarefa rake que eu chamo de forma independente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top