Jaka jest składnia upuszczania kolumny tabeli bazy danych podczas migracji Railsów?
625
Jaka jest składnia upuszczania kolumny tabeli bazy danych podczas migracji Railsów?
remove_column :table_name, :column_name
Na przykład:
remove_column :users, :hobby
usunąłby kolumnę hobby z tabeli użytkowników.
up
idown
metodami, a niechange
, jak wyjaśniono w odpowiedzi @Powers.remove_column :table_name, :column_name, :type, :options
tejchange
metody, ponieważ jeśli określisz typ, możliwe jest przywrócenie migracji. Z dokumentacji: i parametry będą ignorowane, jeśli obecne. Pomocne może być podanie ich w metodzie migracji, aby można ją było przywrócić. W takim przypadku i będzie używany przez add_column.type
options
change
type
options
change
metodzie, ale tylko jeśli określisz typ kolumny. Npremove_column, :table_name, :column_name, :column_type
. W przeciwnym razie podczas próby uruchomienia migracjiremove_column is only reversible if given a type
Dla starszych wersji Railsów
Dla Rails 3 i nowszych
źródło
rails g migration remove_field_name_from_table_name field_name:datatype
działa równieżAddXXXtoTTT
znakuRemoveXXXFromTTT
może znajdować się biała lista nazwa_pliku: typ_danych, i zostaną utworzone odpowiednie instrukcje add_column i remove_column:rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
usuwa dwa atrybuty za pomocą pojedynczej migracji. Zauważ też, żeremove_column
nie jest obsługiwany przezchange
metodę, więc musisz napisać zarówno, jakup
idown
.change
. Wycofanie działa tak, jak powinno.change
metody, którą można przywrócić * , musisz poinformować o typie danych (i wszystkich innych modyfikatorach pola), więc jeśli cofniesz tę migrację, pole można poprawnie odtworzyć. * Kiedy mówię „cofnięty”, chodzi o strukturę bazy danych, oczywiście dane z tej kolumny oczywiście zostaną utracone.Rails 4 został zaktualizowany, więc można użyć metody zmiany w migracji, aby usunąć kolumnę, a migracja zostanie pomyślnie wycofana. Przeczytaj następujące ostrzeżenie dla aplikacji Rails 3:
Ostrzeżenie o szynach 3
Pamiętaj, że podczas korzystania z tego polecenia:
Wygenerowana migracja będzie wyglądać mniej więcej tak:
Pamiętaj, aby nie używać metody zmiany podczas usuwania kolumn z tabeli bazy danych (przykład tego, czego nie chcesz w pliku migracji w aplikacjach Rails 3):
Metoda zmiany w Rails 3 nie jest mądra, jeśli chodzi o remove_column, więc nie będzie można przywrócić tej migracji.
źródło
change
metody,rake db:rollback
polecenie się nie powiedzie.rake db:rollback
jest w zasadzie przeciwieństwemrake db:migrate
. Ten błąd został naprawiony w Rails 4 :)W aplikacji rails4 można użyć metody zmiany również do usuwania kolumn. Trzecim parametrem jest data_type, aw opcjonalnym czwartym możesz podać opcje. Jest to nieco ukryte w sekcji „Dostępne transformacje” w dokumentacji .
źródło
Istnieją dwa dobre sposoby na to:
remove_column
Możesz po prostu użyć remove_column, tak jak:
Jest to w porządku, jeśli potrzebujesz tylko jednej zmiany w schemacie.
blok_tabeli zmian
Możesz to również zrobić za pomocą bloku change_table:
Wolę to, ponieważ uważam to za bardziej czytelne i możesz wprowadzić kilka zmian jednocześnie.
Oto pełna lista obsługiwanych metod change_table:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
źródło
w szynach 5 możesz użyć tego polecenia w terminalu:
na przykład, aby usunąć kolumnę access_level (string) od użytkowników tabeli:
a następnie uruchom:
źródło
Wygeneruj migrację, aby usunąć kolumnę, tak że jeśli jest migrowana (
rake db:migrate
), powinna upuścić kolumnę . I powinien dodać kolumnę z powrotem, jeśli migracja zostanie wycofana (rake db:rollback
).Składnia:
remove_column: nazwa_tabeli,: nazwa_kolumny,: typ
Przykład:
Uwaga : Jeśli pominiesz typ danych , migracja usunie kolumnę pomyślnie, ale jeśli cofniesz migrację, wygeneruje błąd.
źródło
Jasne i proste instrukcje dotyczące szyn 5.2
1. Utwórz migrację
Uruchom następujące polecenie w swoim terminalu:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Uwaga: nazwa tabeli powinna być w liczbie mnogiej zgodnie z konwencją o szynach.
Przykład:
W moim przypadku chcę usunąć
accepted
kolumnę (wartość logiczną) zquotes
tabeli:rails g migration RemoveAcceptedFromQuotes accepted:boolean
Zobacz dokumentację dotyczącą konwencji: podczas dodawania / usuwania pól do tabeli:
2. Sprawdź migrację
3. Uruchom migrację
rake db:migrate
.... A potem startujesz w wyścigach!
źródło
rails db:migrate
Usuń kolumny aplikacji RAILS 5
Polecenie powyżej generuje plik migracji w
db/migrate
katalogu. Snippet blow to jeden z przykładów usuwania kolumny z tabeli wygenerowanej przez generator Railsów,Stworzyłem również krótki przewodnik po Railsach, który można znaleźć tutaj .
źródło
Możesz spróbować:
( Oficjalna dokumentacja )
źródło
X = nazwa kolumny
Y = nazwa tabeli
EDYTOWAĆ
Zmieniono
RemoveXColumnToY
naRemoveXColumnFromY
zgodnie z komentarzami - zapewnia większą przejrzystość tego, co faktycznie robi migracja.źródło
Aby usunąć kolumnę z tabeli, musisz uruchomić następującą migrację:
Następnie uruchom polecenie:
źródło
Podaj poniższe polecenie, które doda we własnym pliku migracji
Po uruchomieniu powyższej komendy możesz sprawdzić, czy plik migracyjny musi zostać usunięty
Następnie migruj bazę danych
źródło
remove_column
wchange
metodzie pomoże Ci usunąć kolumnę z tabeli.Kliknij ten link, aby uzyskać pełne odniesienie: http://guides.rubyonrails.org/active_record_migrations.html
źródło
Aby usunąć kolumnę z tabeli w 3 prostych krokach:
rails g migration remove_column_from_table_name
po uruchomieniu tej komendy w terminalu jeden plik utworzony przez tę nazwę i sygnaturę czasową (usuń kolumnę z nazwy_tabeli).
Następnie przejdź do tego pliku.
wewnątrz pliku musisz napisać
remove_column :table_name, :column_name
Na koniec przejdź do konsoli, a następnie zrób
rake db:migrate
źródło
Jeszcze jedno z konsoli szyn
ActiveRecord::Migration.remove_column(:table_name, :column_name)
źródło
W
remove_column :table_name, :column_name
pliku migracji
Możesz usunąć kolumnę bezpośrednio w konsoli szyn, wpisując:
ActiveRecord::Base.remove_column :table_name, :column_name
źródło
Rób jak to;
rails g migration RemoveColumnNameFromTables column_name:type
To znaczy
rails g migration RemoveTitleFromPosts title:string
W każdym razie lepiej byłoby rozważyć także czas przestoju, ponieważ ActiveRecord buforuje kolumny bazy danych w czasie wykonywania, więc jeśli upuścisz kolumnę, może to powodować wyjątki do momentu ponownego uruchomienia aplikacji.
Ref: Silna migracja
źródło
Po prostu możesz usunąć kolumnę
Na przykład,
źródło
najpierw spróbuj utworzyć plik migracji, uruchamiając polecenie:
a następnie w katalogu głównym projektu uruchom migrację, uruchamiając polecenie:
źródło