2010-06-26 14 views
7

Digamos que he utilizado el siguiente comando para crear un modelo de "Usuario":modelos de actualización en los carriles/migraciones

script/generate model User username:string 

Esto crea el archivo user.rb junto con el archivo de migración rb para crear la tabla Usuarios. Ahora, quiero agregar una columna de correo electrónico a mi modelo de Usuario. ¿Cuál es la mejor manera de hacer eso? ¿Lo hago manualmente y escribo el archivo de migración a mano o hay un atajo para hacerlo? Si escribo la migración manualmente, ¿debo nombrarla de la misma manera que el script de migración anterior (con una marca de tiempo al frente) para garantizar que se ejecute después de la migración anterior?

Respuesta

6

No se preocupe por la marca de tiempo. Se generará automáticamente. Usted puede hacer una

script\generate migration add_email_to_user email:string 

Esto crearía automáticamente un archivo de migración, que se vería así:

class AddEmailToUser < ActiveRecord::Migration 
    def self.up 
    add_column :email, :string 
    end 

    def self.down 
    remove_column :email 
    end 
end 

la imagen tendrá la marca de tiempo en el formato YYYYMMDDHHMMSS (para los carriles 2.1 y superiores) añadido delante del nombre del archivo.

2

El Guide tiene información sobre cómo generar migraciones. Si se utiliza el generador de rieles, se creará archivos con nombres correctos:

ruby script/generate migration AddEmailToUser email:string 
1

bien que puede hacer dos cosas:

1) Si no se ha desplegado en cualquier lugar, sin embargo, o no te importa volcando el archivo db y ejecutando sus migraciones nuevamente, luego modifique el archivo. Elimine las tablas de su base de datos y ejecute db: migrate. Fácil de hacer esto en desarrollo.

2) Si esta aplicación está en producción, o no desea eliminar todas sus tablas. Luego crea un nuevo archivo de migración. Luego, en esta nueva migración, agregue/modifique/elimine la columna. Luego ejecute db: migrate y los nuevos cambios tendrán efecto en su tabla. Esta es la mejor práctica.

En cuanto a la denominación de su migración, se utilizan marcas de tiempo porque los rieles crearán una tabla que realiza un seguimiento de las últimas migraciones ejecutadas. Para esto, es mejor usar las marcas de tiempo. Pero si elige, puede usar su propia convención en lugar de marcas de tiempo. Tal vez les nombre 001_migration.rb, 002_migration.rb, etc.

Espero que ayude.

Cuestiones relacionadas