2013-05-08 2 views
17

So che posso toccare una migrazione e aggiungereAggiunta index: unica per una colonna in Ruby on Rails tramite generare migrazione

add_index :table_name, :column_name, :unique => true 

Ma come è il comando di migrazione rotaie diritto di generare questo?

rails g migration add_index_to_column_name :column_name, :unique => true 

È giusto?

Nel mio esempio speciale ho una tabella clienti

t.integer :customerID 
    t.string :surname 
    t.string :first_name 
    t.string :phone 

un voglio impostare il CustomerID unico. Provato

rails g migration AddIndexToCustomers :customerID, :unique => true 

Ma se guardo al mio file di migrazione dopo questo, dont look giusto vedere questo:

def change 
    add_column :customers, :, :customerID, 
    add_column :customers, :, :unique 
    add_column :customers, :=, :string 
    end 

qualsiasi idea o suggerimento?

+0

fare attenzione a non usare '> true' nella shell, oppure si creerà un file' true' tramite reindirizzamento. –

risposta

31

A partire da Rails 3.2 si in grado di utilizzare:

rails g migration add_index_to_table_name column_name:uniq 

esempio da http://guides.rubyonrails.org/3_2_release_notes.html

rails g scaffold Post title:string:index author:uniq price:decimal{7,2} 

upd mi dispiace. Il tipo predefinito se non lo passi sarebbe una stringa. Puoi passare il tipo da solo.

column_name:type:uniq 

Così il vostro esempio dovrebbe apparire come:

rails g migration add_index_to_customers customerID:integer:uniq 
+2

no .. questo è che non funziona sempre 'def cambiare add_column: CustomerIDs,: CustomerID: stringa add_index: CustomerIDs,: CustomerID: unica => true finali ' ' –

+0

provato rotaie add_index_to_customers g di migrazione customerID: uniq' ma crea ancora l'ID cliente come una stringa. –

+0

Ho aggiunto altri esempi. Puoi passare il tipo alla migrazione. – ck3g