2011-11-24 21 views
5

Tengo un modelo existente (y una tabla) con estas columnas: id, name, city. En esta tabla están los datos y me gustaría agregar a esta tabla las columnas created_at y updated_at - ¿alguien podría ayudarme, cómo hacerlo? Es decir, si creo un modelo, estas dos columnas se crean automáticamente y las informaciones de tiempo se insertan siempre automáticamente, cuando guardo algo.Rieles: ¿cómo agregar marcas de tiempo a un modelo?

¿Es posible ahora agregar estas dos columnas con datos de tiempo de inserción automática?

+0

por lo que tiene un modelo existente que le gustaría para agregar marcas de tiempo a? ¿Qué versión de Rails estás usando? –

+0

El activerecord de rieles crea automáticamente columnas de marca de tiempo, ¿por qué desea agregar sus columnas de marca de tiempo? – megas

+0

@megas, puede haberlos eliminado de su migración inicial –

Respuesta

13

Esto debería permitirle agregar columnas de fecha y hora a un modelo ya existente

rails generate migration add_timestamps_to_users 

Esto creará un archivo de migración para usted. Abrirlo y hacer los cambios necesarios

class AddTimestampsToUsers < ActiveRecord::Migration 
    # in my example i'm using `users` table; change this to match your table name 
    def change_table :users do |t| 
    t.timestamps 
    end 
end 

continuación, migrar su base de datos

rake db:migrate 
+0

Buena respuesta, también es bueno tener en cuenta que desea modificar los comandos para que coincida con el nombre del modelo que está modificando. –

+0

Esta solución no se aplica a la tabla que contiene datos, porque las columnas creadas recientemente deben tener valores predeterminados y la sintaxis de "marcas de tiempo" no permite especificarlas. – Paul

+1

Paul, ¿cómo esperas recuperar los valores de fecha/hora para los registros preexistentes? Creo que los valores 'null' son suficientes para los registros que se crearon antes de que existiera la columna de marca de tiempo. –

12

Cabe señalar que si bien la respuesta de Maček se encuentra justo en el núcleo, que no utiliza la sintaxis correcta para las migraciones (olvidé el método de "cambio").

Así que aquí es su respuesta con la sintaxis corregido:

Esto debería permitirle agregar columnas de fecha y hora a un modelo ya existente

rake generate migration add_timestamps_to_users 

Esto creará un archivo de migración para usted. Abrirlo y hacer los cambios necesarios

class AddTimestampsToModel < ActiveRecord::Migration 
    # in my example i'm using `users` table; change this to match your table name 
    def change 
    change_table :users do |t| 
     t.timestamps 
    end 
    end 
end 

continuación, migrar su base de datos

rake db:migrate 
4

add_timestamps es un método específico para este fin:

class AddTimestampsToUsers < ActiveRecord::Migration 
    def change 
    add_timestamps :users 
    end 
end 
Cuestiones relacionadas