2009-05-19 6 views
6

Digamos que crea una tabla en una migración rieles, especificando omitir la columna ID:En una migración de Rails, ¿es posible indicar que una columna recién agregada debería estar antes o después de una columna existente en la tabla?

create_table :categories_posts, :id => false do |t| 
    t.column :category_id, :integer, :null => false 
    t.column :post_id, :integer, :null => false 
end 

tarde decido que quiero añadir una columna de ID como clave principal por lo que se crea una nueva migración:

class ChangeCategoriesToRichJoin < ActiveRecord::Migration 
    def self.up 
    add_column :categories_posts, :id, :primary_key 
    end 

    def self.down 
    remove_column :categories_posts, :id 
    end 
end 

Pero cuando miro a la mesa después de migrar, que se parece a esto:

columna
category_id 
post_id 
id 

la identificación se encuentra en la última posición de la tabla, mientras que no se rmalmente, una columna de identificación sería la primera.

¿Hay alguna manera de cambiar la migración de ChangeCategoriesToRichJoin para insistir en que se cree la columna de ID ANTES de la columna category_id en la tabla?

¿Debo dejar caer la tabla y agregar la columna en la definición "crear tabla"?

Respuesta

1

No he podido poner las columnas en orden, pero con Rails puede deshacer, alterar el archivo de migración anterior para agregar las nuevas columnas en el orden que desee y luego volver a migrar la migración anterior incluyendo el nuevo campo. No es exactamente lo ideal, pero la capacidad de migrar y deshacer fácilmente, puede funcionar si tiene suficiente OCD como para requerir un pedido de columnas. : P

No soy un experto, pero he leído mucha documentación de Rails (y muy recientemente) y no recuerdo haber encontrado una solución para esto.

+0

Esa fue mi sospecha. Gracias por confirmar. –

5

Uso :after => :another_column_name, por ejemplo .:

change_table :users do |t| 
    t.integer :like_count, :default => 0, :after => :view_count 
end 
+0

¡Esta es la respuesta real! Gracias. – digidigo

Cuestiones relacionadas