remove rails migrations column ruby-on-rails ruby activerecord rails-migrations

ruby on rails - migrations - Comprueba si existe una tabla en Rails



remove migration rails (4)

Tengo una tarea de rake que no funcionará a menos que exista una tabla. Estoy trabajando con más de 20 ingenieros en un sitio web, así que quiero asegurarme de que hayan migrado la tabla antes de que puedan hacer una tarea de rake que llene esa tabla respectiva.

¿AR tiene un método como Table.exists ? ¿Cómo puedo asegurarme de que hayan migrado la tabla con éxito?


Descubrí esto mientras intentaba eliminar una tabla mediante una migración:

drop_table :kittens if (table_exists? :kittens) ActiveRecord::Migration.drop_table :kittens if (ActiveRecord::Base.connection.table_exists? :kittens)

funciona para Rails 3.2

Esta forma más simple estará disponible en Rails 5:

drop_table :kittens, if_exists: true

Referencia: https://github.com/rails/rails/pull/16366

Y aquí está el CHANGELOG Rails 5 ActiveRecord:

Introduzca la opción: if_exists para drop_table.

Ejemplo:

drop_table(:posts, if_exists: true)

Eso se ejecutaría:

DROP TABLE IF EXISTS posts

Si la tabla no existe, if_exists: false (el valor predeterminado) genera una excepción, mientras que if_exists: true no hace nada.


En Rails 5, la API se volvió explícita con respecto a tablas / vistas , colectivamente fuentes de datos .

# Tables and views ActiveRecord::Base.connection.data_sources ActiveRecord::Base.connection.data_source_exists? ''kittens'' # Tables ActiveRecord::Base.connection.tables ActiveRecord::Base.connection.table_exists? ''kittens'' # Views ActiveRecord::Base.connection.views ActiveRecord::Base.connection.view_exists? ''kittens''

En Rails 2, 3 y 4, la API trata de tablas .

# Listing of all tables and views ActiveRecord::Base.connection.tables # Checks for existence of kittens table/view (Kitten model) ActiveRecord::Base.connection.table_exists? ''kittens''

Obtener el estado de las migraciones:

# Tells you all migrations run ActiveRecord::Migrator.get_all_versions # Tells you the current schema version ActiveRecord::Migrator.current_version

Si necesita más API para migraciones o metadatos, consulte:


incluso si la tabla no existe:

modelo Kitten , mesa esperada kittens carriles 3:

Kitten.table_exists? # => falso


Rails 5.1

if ActiveRecord::Base.connection.data_source_exists? ''table_name'' drop_table :table_name end

o

drop_table :table_name, if_exists: true