ruby on rails - remove - Rails DB Migration-¿Cómo soltar una tabla?
rollback migration rails (19)
- carriles g migración drop_users
- editar la migración
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :name
t.timestamps
end
end
end
- rastrillo db: migrar
Agregué una tabla que pensé que iba a necesitar, pero ahora ya no planeo usarla. ¿Cómo debo quitar esa mesa?
Ya he ejecutado migraciones, por lo que la tabla está en mi base de datos. Creo que los rails generate migration
deberían poder manejar esto, pero todavía no he descubierto cómo.
He intentado:
rails generate migration drop_tablename
pero eso acaba de generar una migración vacía.
¿Cuál es la forma "oficial" de colocar una tabla en Rails?
Abre tu consola de rieles
ActiveRecord::Base.connection.execute("drop table table_name")
Alternativa a generar una excepción o intentar recrear una tabla ahora vacía, mientras se sigue habilitando la reversión de la migración, rehacer, etc.
def change
drop_table(:users, force: true) if ActiveRecord::Base.connection.tables.include?(''users'')
end
Creo que, para ser completamente "oficial", necesitarías crear una nueva migración y colocar drop_table en self.up. El método self.down debe contener todo el código para recrear la tabla en su totalidad. Es de suponer que ese código podría tomarse de schema.rb en el momento de crear la migración.
Parece un poco extraño, poner un código para crear una tabla que sabes que no vas a necesitar más, pero eso mantendría todo el código de migración completo y "oficial", ¿verdad?
Simplemente hice esto para una mesa que necesitaba dejar, pero honestamente no probé el "down" y no estoy seguro de por qué lo haría.
Escribe tu migración manualmente. Ej. Ejecutar rails g migration DropUsers
.
En cuanto al código de la migración, citaré la lista de verificación de Rails Migration de Maxwell Holder.
BAD: ejecutar rake db:migrate
y luego rake db:rollback
fallará
class DropUsers < ActiveRecord::Migration
def change
drop_table :users
end
end
BIEN: revela la intención de que la migración no debe ser reversible
class DropUsers < ActiveRecord::Migration
def up
drop_table :users
end
def down
fail ActiveRecord::IrreversibleMigration
end
end
MEJOR - es en realidad reversible
class DropUsers < ActiveRecord::Migration
def change
drop_table :users do |t|
t.string :email, null: false
t.timestamps null: false
end
end
end
La forma simple y oficial sería esta:
rails g migration drop_tablename
Ahora vaya a su base de datos / migrar y busque su archivo que contiene el nombre de drop_tablename como nombre de archivo y edítelo a este.
def change
drop_table :table_name
end
Entonces necesitas correr
rake db:migrate
en tu consola
Necesitaba eliminar nuestros scripts de migración junto con las tablas en sí ...
class Util::Table < ActiveRecord::Migration
def self.clobber(table_name)
# drop the table
if ActiveRecord::Base.connection.table_exists? table_name
puts "/n== " + table_name.upcase.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
drop_table table_name
end
# locate any existing migrations for a table and delete them
base_folder = File.join(Rails.root.to_s, ''db'', ''migrate'')
Dir[File.join(base_folder, ''**'', ''*.rb'')].each do |file|
if file =~ /create_#{table_name}.rb/
puts "== deleting migration: " + file.cyan + " ! "
<< Time.now.strftime("%H:%M:%S").yellow
FileUtils.rm_rf(file)
break
end
end
end
def self.clobber_all
# delete every table in the db, along with every corresponding migration
ActiveRecord::Base.connection.tables.each {|t| clobber t}
end
end
desde la ventana de terminal ejecutar:
$ rails runner "Util::Table.clobber ''your_table_name''"
o
$ rails runner "Util::Table.clobber_all"
Necesitas crear un nuevo archivo de migración usando el siguiente comando
rails generate migration drop_table_xyz
y escriba el código drop_table en el archivo de migración recién generado (db / migration / xxxxxxx_drop_table_xyz) como
drop_table :tablename
O si desea eliminar una tabla sin migración, simplemente abra la consola de rieles
$ rails c
y ejecuta el siguiente comando
ActiveRecord::Base.connection.execute("drop table table_name")
o puedes usar un comando más simplificado
ActiveRecord::Migration.drop_table(:table_name)
No siempre podrá generar simplemente la migración para que ya tenga el código que desea. Puede crear una migración vacía y luego rellenarla con el código que necesita.
Puede encontrar información sobre cómo realizar diferentes tareas en una migración aquí:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Más específicamente, puede ver cómo eliminar una tabla utilizando el siguiente enfoque:
drop_table :table_name
Primero genera una migración vacía con cualquier nombre que desees. Es importante hacerlo de esta manera ya que crea la fecha apropiada.
rails generate migration DropProductsTable
Esto generará un archivo .rb en / db / migrate / like 20111015185025_drop_products_table.rb
Ahora edita ese archivo para que se vea así:
class DropProductsTable < ActiveRecord::Migration
def up
drop_table :products
end
def down
raise ActiveRecord::IrreversibleMigration
end
end
Lo único que agregué fue drop_table :products
y raise ActiveRecord::IrreversibleMigration
.
Luego ejecuta rake db:migrate
y te quitará la tabla.
Puede revertir una migración como está en la guía:
http://guides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations
Generar una migración:
rails generate migration revert_create_tablename
Escribe la migración:
require_relative ''20121212123456_create_tablename''
class RevertCreateTablename < ActiveRecord::Migration[5.0]
def change
revert CreateTablename
end
end
De esta manera también puede revertir y puede usar para revertir cualquier migración
Si bien las respuestas proporcionadas aquí funcionan correctamente, quería algo un poco más ''directo'', lo encontré aquí: link Primero ingrese a la consola de rieles:
$rails console
Entonces simplemente escriba:
ActiveRecord::Migration.drop_table(:table_name)
Y listo, trabajó para mí!
Si quieres soltar una tabla específica puedes hacerlo.
$ rails db:migrate:up VERSION=[Here you can insert timestamp of table]
De lo contrario, si quieres eliminar toda tu base de datos, puedes hacerlo.
$rails db:drop
correr
rake db:migrate:down VERSION=<version>
Donde <version>
es el número de versión del archivo de migración que desea revertir.
Ejemplo:-
rake db:migrate:down VERSION=3846656238
la mejor manera que puedes hacer es
rails g migration Drop_table_Users
entonces haz lo siguiente
rake db:migrate
simplemente puedes dejar caer una mesa desde la consola de rieles. primero abre la consola
$ rails c
luego pega este comando en la consola
ActiveRecord::Migration.drop_table(:table_name)
Reemplace table_name con la tabla que desea eliminar.
También puedes soltar la tabla directamente desde el terminal. simplemente ingrese en el directorio raíz de su aplicación y ejecute este comando
$ rails runner "Util::Table.clobber ''table_name''"
ActiveRecord::Base.connection.drop_table :table_name
Drop Table / Migration
ejecutar: - $ rails generar migración DropTablename
exp: - $ rails generan migración DropProducts
Ejecute este comando: -
rails g migration drop_table_name
entonces:
rake db:migrate
o si está utilizando la base de datos MySql entonces:
- iniciar sesión con la base de datos
-
show databases;
-
show tables;
-
drop table_name;