Risposte:
remove_column :table_name, :column_name
Per esempio:
remove_column :users, :hobby
rimuoverebbe la colonna hobby dalla tabella degli utenti.
remove_column :table_name, :column_name, :type, :options
all'interno del change
metodo, poiché se si specifica il tipo è possibile ripristinare la migrazione. Dalla documentazione: I parametri type
e options
verranno ignorati se presenti. Può essere utile fornire questi nel change
metodo di una migrazione in modo che possa essere ripristinato. In tal caso, type
e options
verrà utilizzato da add_column.
change
metodo, ma solo se specifichi il tipo di colonna. Es remove_column, :table_name, :column_name, :column_type
. In caso contrario, quando si tenta di eseguire la migrazione viene visualizzato il seguente errore:remove_column is only reversible if given a type
Per le versioni precedenti di Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Per Rails 3 e versioni successive
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
funziona anche
AddXXXtoTTT
un RemoveXXXFromTTT
può essere seguito da un elenco a spaziatura bianca di filed_name: data_type e verranno create le istruzioni add_column e remove_column appropriate: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
rimuove due attributi usando una singola migrazione. Si noti inoltre che remove_column
non è supportato dal change
metodo, quindi è necessario scrivere sia up
e down
.
change
questo. Il rollback funziona come dovrebbe.
change
metodo che può essere ripristinato * dovrai informare il tipo di dati (e tutti gli altri modificatori di campo), quindi se esegui il rollback di quella migrazione, il campo può essere ricreato correttamente. * Quando dico ripristinato, questo è in termini di struttura del database, ovviamente, i dati di quella colonna andranno ovviamente persi.
Rails 4 è stato aggiornato, quindi il metodo di modifica può essere utilizzato nella migrazione per eliminare una colonna e la migrazione verrà ripristinata correttamente. Leggere il seguente avviso per le applicazioni Rails 3:
Avviso Rails 3
Si noti che quando si utilizza questo comando:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
La migrazione generata sarà simile a questa:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
Assicurati di non utilizzare il metodo di modifica quando rimuovi le colonne da una tabella del database (esempio di ciò che non vuoi nel file di migrazione nelle app Rails 3):
def change
remove_column :table_name, :field_name
end
Il metodo di modifica in Rails 3 non è intelligente quando si tratta di remove_column, quindi non sarà possibile ripristinare questa migrazione.
change
metodo, il rake db:rollback
comando verrà visualizzato in errore. rake db:rollback
è sostanzialmente l'opposto di rake db:migrate
. Questo bug è stato corretto in Rails 4 :)
In un'app rails4 è possibile utilizzare il metodo change anche per rimuovere colonne. Il terzo parametro è data_type e nel quarto opzionale è possibile fornire opzioni. È un po 'nascosto nella sezione "Trasformazioni disponibili" nella documentazione .
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
Ci sono due buoni modi per farlo:
Puoi semplicemente usare remove_column, in questo modo:
remove_column :users, :first_name
Questo va bene se hai solo bisogno di apportare una singola modifica al tuo schema.
Puoi anche farlo usando un blocco change_table, in questo modo:
change_table :users do |t|
t.remove :first_name
end
Preferisco questo perché lo trovo più leggibile e puoi apportare diverse modifiche contemporaneamente.
Ecco l'elenco completo dei metodi change_table supportati:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
nelle rotaie 5 è possibile utilizzare questo comando nel terminale:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
ad esempio per rimuovere la colonna access_level (stringa) dagli utenti della tabella:
rails generate migration remove_access_level_from_users access_level:string
e quindi eseguire:
rake db:migrate
Generare una migrazione per rimuovere una colonna in modo tale che se viene migrata ( rake db:migrate
), dovrebbe rilasciare la colonna . E dovrebbe aggiungere la colonna indietro se questa migrazione è rollbacked ( rake db:rollback
).
La sintassi:
remove_column: table_name,: column_name,: type
Rimuove la colonna, inoltre aggiunge la colonna indietro se la migrazione viene ripristinata.
Esempio:
remove_column :users, :last_name, :string
Nota : se salti data_type , la migrazione rimuoverà correttamente la colonna ma se esegui il rollback della migrazione genererà un errore.
Esegui il seguente comando nel tuo terminale:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Nota: il nome della tabella deve essere in forma plurale come da convenzione delle rotaie.
Esempio:
Nel mio caso voglio rimuovere la accepted
colonna (un valore booleano) dalla quotes
tabella:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Vedi la documentazione relativa a : una convenzione durante l'aggiunta / rimozione di campi in una tabella:
Esiste uno speciale collegamento sintattico per generare migrazioni che aggiungono campi a una tabella.
le rotaie generano migrazione add_fieldname_to_tablename fieldname: fieldtype
# 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
.... E poi parti per le gare!
rails db:migrate
Rimuovi colonne per l'app RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
Il comando sopra genera un file di migrazione all'interno della db/migrate
directory. Lo snippet blow è uno dei rimuovi colonna dall'esempio di tabella generato dal generatore Rails,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
Ho anche realizzato una rapida guida di riferimento per Rails che può essere trovata qui .
rails g migration RemoveXColumnFromY column_name:data_type
X = nome colonna
Y = nome tabella
MODIFICARE
Cambiato RemoveXColumnToY
per RemoveXColumnFromY
come da commenti - consente una maggiore chiarezza per ciò che la migrazione è in realtà facendo.
remove_column
nel change
metodo ti aiuterà a eliminare la colonna dalla tabella.
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
Vai su questo link per un riferimento completo: http://guides.rubyonrails.org/active_record_migrations.html
Per rimuovere la colonna dalla tabella in soli 3 semplici passaggi, come segue:
rails g migration remove_column_from_table_name
dopo aver eseguito questo comando nel terminale un file creato con questo nome e timestamp (remove_column from_table_name).
Quindi vai a questo file.
all'interno del file devi scrivere
remove_column :table_name, :column_name
Finalmente vai alla console e poi fallo
rake db:migrate
Eccone un'altra dalla console delle rotaie
ActiveRecord::Migration.remove_column(:table_name, :column_name)
Attraverso
remove_column :table_name, :column_name
in un file di migrazione
È possibile rimuovere una colonna direttamente in una console di rotaie digitando:
ActiveRecord::Base.remove_column :table_name, :column_name
Fai così;
rails g migration RemoveColumnNameFromTables column_name:type
ie rails g migration RemoveTitleFromPosts title:string
In ogni caso, sarebbe meglio considerare i tempi di inattività e poiché ActiveRecord memorizza nella cache le colonne del database in fase di esecuzione, quindi se si elimina una colonna, potrebbero verificarsi eccezioni fino al riavvio dell'app.
Rif: forte migrazione
Semplicemente, puoi rimuovere la colonna
remove_column :table_name, :column_name
Per esempio,
remove_column :posts, :comment
up
e neidown
metodi, nonchange
, come spiegato nella risposta di @Powers.