2009-05-19 8 views
6

Diciamo che creo una tabella in una migrazione Rails, specificando di omettere la colonna ID:In una migrazione di Rails, è possibile indicare che una colonna appena aggiunta deve essere prima o dopo una colonna esistente nella tabella?

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

tardi decido che voglio aggiungere una colonna ID come chiave primaria in modo da creare una nuova migrazione:

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 

Ma quando guardo il tavolo dopo la migrazione, sembra che questo:

colonna
category_id 
post_id 
id 

l'ID è in ultima posizione nella tabella, mentre non per prima cosa sarebbe una colonna id.

C'è un modo per modificare la migrazione di ChangeCategoriesToRichJoin per insistere sulla colonna id che si sta creando PRIMA della colonna id_destinazione nella tabella?

Oppure devo lasciare la tabella e aggiungere la colonna nella definizione "Crea tabella"?

risposta

1

Non sono riuscito a mettere le colonne in ordine, da solo, ma con Rails è possibile eseguire il rollback, modificare il vecchio file di migrazione per aggiungere le nuove colonne nell'ordine desiderato, quindi eseguire nuovamente la migrazione della vecchia migrazione incluso il nuovo campo. Non è esattamente l'ideale, ma la possibilità di migrare e rollback facilmente, può funzionare se sei OCD abbastanza da richiedere l'ordine di colonne. : P

Non sono un esperto, ma ho letto molta documentazione di Rails (e molto recentemente) e non riesco a ricordare di aver trovato una soluzione per questo.

+0

Quello era il mio sospetto. Grazie per la conferma. –

5

Usa :after => :another_column_name, ad es .:

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

Questa è la risposta reale! Grazie. – digidigo

Problemi correlati