2012-09-23 16 views
14

Tengo una aplicación Rails, donde uno de los modelos no tiene la columna id. Haciendo un poco de investigación he encontrado la migración que lo creó:Agregar columna Id en una migración

create_table(:the_model, :id => false) do |t| 
    # columns 
end 

Ahora, en una nueva migración, quiero añadir la columna de la id de una manera estándar de rieles (no específica utilizando SQL base de datos). ¿Cómo puedo hacer eso?

ya he intentado esto sin éxito:

change_table(:the_model, :id => true) do |t| 
end 

Respuesta

31

Usted puede agregar manualmente la columna id:

add_column :table_name, :id, :primary_key 

o clara (o copia de seguridad) de los datos, la reversión de esta migración, deshacerse de la opción :id => false, y volver a migrar.

+0

¡El comando funcionó! Aunque terminé recreando la tabla ('drop_table' y' create_table' en la migración) porque ya tenía una clave principal. ¡Muchas gracias! – alf

+0

¡Eso también funciona! No hay problema. – cdesrosiers

+2

Al ejecutar la migración, ¿la columna de identificación de los registros existentes se completará automáticamente con valores únicos de identificación? Si no es así, ¿cómo/qué los asigno para mantener el sistema feliz? –

5

Ya tienes tu respuesta, pero aquí es un chiste que hace todo en este caso

rails generate migration AddIdToModel id:integer 

mirada a la sintaxis del nombre del archivo de migración Añadir ColumnName Para NombreTabla siguió a la descripción de la columna. Se generará algo como continuación

class AddIdToModel < ActiveRecord::Migration 
    def change 
    add_column :models, :id, :integer 
    end 
end 

Ahora puede cambiar esta línea si se siente para nada más. y simplemente ejecuta rake db:migrate.

+3

'rails g migration add_id_to_model id: primary_key' haciendo todo por ti – dubadub

2

No es necesario mencionar :integer

rails g migration add_id_to_model id:primary_key trabajó para mí.

Cuestiones relacionadas