2013-05-08 11 views
17

wiem, że mogę dotknąć migrację i dodaćDodawanie index: unikalny na kolumnę w Ruby on Rails poprzez generowanie migracji

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

Ale jak to prawo Komenda szyny migracja do wygenerowania tego?

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

Czy to prawda?

Moim szczególnym przykładzie mam klienci stół

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

chcę ustawić customerId się wyjątkowy. Próbowaliśmy

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

ale jeśli spojrzeć na moje pliku migracji po tym, to nie wygląda dobrze zobaczyć to:

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

Każdy pomysł lub sugestię?

+0

Pamiętaj, aby nie używać '> TRUE w swojej skorupie, lub będziesz utworzyć plik' true' poprzez przekierowania. –

Odpowiedz

31

Począwszy od Rails 3.2 jesteś w stanie użyć:

rails g migration add_index_to_table_name column_name:uniq 

przykład z http://guides.rubyonrails.org/3_2_release_notes.html

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

UPD przepraszam. Domyślnym typem, jeśli go nie przekażesz, będzie ciąg znaków. Możesz samemu podać typ.

column_name:type:uniq 

Zatem Twój przykład powinien wyglądać tak:

rails g migration add_index_to_customers customerID:integer:uniq 
+2

nope .. ów nie działa coraz 'def zmienić add_column: customerids,: customerId, String add_index: customerids,: customerId, Unique => true końcowych ' ' –

+0

próbował szyn add_index_to_customers g migracji customerId: uniq' ale nadal tworzy identyfikatorklienta jako ciąg znaków. –

+0

Dodałem więcej przykładów. Możesz przekazać typ do migracji. – ck3g