2013-05-08 5 views
17

Ich weiß, dass ich eine Migration berühren undIndex Hinzufügen: einzigartig für eine Spalte in Ruby on Rails über Migration erzeugen

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

hinzufügen Wie aber ist der richtige Schienen Migrationsbefehl dies zu generieren?

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

Ist das richtig?

In meinem speziellen Beispiel habe ich eine Tabelle Kunden

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

ein i die customerID auf einzigartige festlegen möchten. Versuchte

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

Aber wenn ich nach dieser meiner Migrationsdatei suchen, nicht es richtig diesen Look sehen:

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

Jede Idee oder einen Vorschlag?

+0

Achten Sie darauf, nicht zu verwenden '> true' in der Shell, oder es eine' true' Datei über Umleitung zu erstellen. –

Antwort

31

Ab Rails 3.2 können Sie verwenden:

rails g migration add_index_to_table_name column_name:uniq 

Beispiel von http://guides.rubyonrails.org/3_2_release_notes.html

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

upd Es tut mir leid. Der Standardtyp, wenn Sie ihn nicht übergeben, wäre eine Zeichenfolge. Sie können den Typ selbst übergeben.

column_name:type:uniq 

So kann Ihr Beispiel sollte wie folgt aussieht:

rails g migration add_index_to_customers customerID:integer:uniq 
+2

nee .. das ist nicht funktioniert immer 'def add_column ändern: CustomerIDs,: customerID,: string add_index: CustomerIDs,: customerID,: unique => true Ende ' –

+0

versucht 'Schienen g Migration add_index_to_customers customerID: uniq' aber erstellt die customerID immer noch als Zeichenfolge. –

+0

Ich habe weitere Beispiele hinzugefügt. Sie können den Typ in die Migration eingeben. – ck3g