Pregunta

Tengo 4 migraciones relacionadas en mi aplicación Rails:

Las primeras 3 migraciones crean una tabla cada una en self.up y las sueltan en sus respectivos métodos self.down.

La cuarta migración ejecuta una tarea de rastrillo que carga datos a los tres (en self.up). ¿Estoy pensando qué poner en self.down de esta migración para eliminar las filas de las 3 tablas?

¿Lo estoy haciendo mal? Probablemente debería haber creado una migración donde creo 3 tablas y cargue los datos en self.up y simplemente suelte las tres tablas en el método self.down?

¿Fue útil?

Solución

¡Esto está mal!

Las migraciones solo deben usarse para migrar sus datos Modelo no su Data .

Rails 2.3.4 agrega 'semillas'. Este es un archivo en db / seeds.rb que contiene el código ruby ??para 'arrancar' su base de datos. Esta es una excelente manera de crear contenido semiestático para su base de datos, como categorías, tablas de búsqueda o cuentas de usuario.

Luego puede cargar los datos semilla con una simple tarea de rastrillo

rake db:seed

Otros consejos

No hay realmente una forma correcta o incorrecta de hacer esto. Según lo que haya hecho, la cuarta migración debería descargar los datos en su método inactivo. Cada down solo debe deshacer las acciones del up.

No es necesario cargar datos en la migración que crea la tabla. Si tiene 3 tablas que crean relaciones has_many o belong_to, entonces tendría sentido colocar los datos en una migración separada para que pueda crear las relaciones y luego usarlas en su carga de datos.

Todo eso aparte, si tiene una tarea de rastrillo para cargar datos, ¿por qué molestarse con una migración que ejecuta esa tarea de rastrillo? Simplemente haga que la ejecución de la tarea de rastrillo sea parte de su instalación, o simplemente use su tarea de rastrillo para cargar o descargar algunos datos de demostración.

Generalmente mantengo mi esquema de migraciones enfocado, y pongo cualquier carga de datos en una tarea de rastrillo que llamo independientemente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top