Odpowiedzi:
remove_column :table_name, :column_name
Na przykład:
remove_column :users, :hobby
usunąłby kolumnę hobby z tabeli użytkowników.
remove_column :table_name, :column_name, :type, :options
tej change
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. Np remove_column, :table_name, :column_name, :column_type
. W przeciwnym razie podczas próby uruchomienia migracji remove_column is only reversible if given a type
Dla starszych wersji Railsów
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Dla Rails 3 i nowszych
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
działa również
AddXXXtoTTT
znaku RemoveXXXFromTTT
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ż, że remove_column
nie jest obsługiwany przez change
metodę, więc musisz napisać zarówno, jak up
i down
.
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:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
Wygenerowana migracja będzie wyglądać mniej więcej tak:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
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):
def change
remove_column :table_name, :field_name
end
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.
change
metody, rake db:rollback
polecenie się nie powiedzie. rake db:rollback
jest w zasadzie przeciwieństwem rake 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 .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Istnieją dwa dobre sposoby na to:
Możesz po prostu użyć remove_column, tak jak:
remove_column :users, :first_name
Jest to w porządku, jeśli potrzebujesz tylko jednej zmiany w schemacie.
Możesz to również zrobić za pomocą bloku change_table:
change_table :users do |t|
t.remove :first_name
end
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
w szynach 5 możesz użyć tego polecenia w terminalu:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
na przykład, aby usunąć kolumnę access_level (string) od użytkowników tabeli:
rails generate migration remove_access_level_from_users access_level:string
a następnie uruchom:
rake db:migrate
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
Usuwa kolumnę, a także dodaje kolumnę z powrotem, jeśli migracja zostanie wycofana .
Przykład:
remove_column :users, :last_name, :string
Uwaga : Jeśli pominiesz typ danych , migracja usunie kolumnę pomyślnie, ale jeśli cofniesz migrację, wygeneruje błąd.
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ą) z quotes
tabeli:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Zobacz dokumentację dotyczącą konwencji: podczas dodawania / usuwania pól do tabeli:
Istnieje specjalny skrót składniowy do generowania migracji, które dodają pola do tabeli.
szyny generują migrację add_fieldname_to_tablename nazwa_pola: typ pola
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... A potem startujesz w wyścigach!
rails db:migrate
Usuń kolumny aplikacji RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
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,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Stworzyłem również krótki przewodnik po Railsach, który można znaleźć tutaj .
rails g migration RemoveXColumnFromY column_name:data_type
X = nazwa kolumny
Y = nazwa tabeli
EDYTOWAĆ
Zmieniono RemoveXColumnToY
na RemoveXColumnFromY
zgodnie z komentarzami - zapewnia większą przejrzystość tego, co faktycznie robi migracja.
remove_column
w change
metodzie pomoże Ci usunąć kolumnę z tabeli.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Kliknij ten link, aby uzyskać pełne odniesienie: http://guides.rubyonrails.org/active_record_migrations.html
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
Jeszcze jedno z konsoli szyn
ActiveRecord::Migration.remove_column(:table_name, :column_name)
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ó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
Po prostu możesz usunąć kolumnę
remove_column :table_name, :column_name
Na przykład,
remove_column :posts, :comment
up
idown
metodami, a niechange
, jak wyjaśniono w odpowiedzi @Powers.