Tengo una tarea de rastrillo 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 rastrillo que llenará esa tabla respectiva.
¿AR tiene un método como Table.exists
? ¿Cómo puedo asegurarme de que hayan migrado la tabla correctamente?
rake db:migrate
fallará.)Respuestas:
En Rails 5, la API se hizo explícita con respecto a tablas / vistas , colectivamente fuentes de datos .
En Rails 2, 3 y 4, la API trata sobre tablas .
Obtener el estado de las migraciones:
Si necesita más API para migraciones o metadatos, consulte:
esta es la
ActiveRecord::Base
clase para laschema_migrations
tabladonde toda la acción ocurre cuando se ejecutan migraciones
fuente
ActiveRecord::Base.connection.table_exist 'users'
buscaría una tabla de usuarios.ActiveRecord::Base.connection.table_exists? 'kittens
buscaría una mesa de gatito. ¡Eso es a menos que destruya a todos los gatitos!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
es el correcto ahoraincluso si la tabla no existe:
modelo
Kitten
,kittens
rieles de mesa esperados 3:Kitten.table_exists? # => falso
fuente
Descubrí esto mientras intentaba eliminar una tabla a través de una migración:
funciona para Rails 3.2
Esta forma más simple estará disponible en Rails 5:
Referencia: https://github.com/rails/rails/pull/16366
Y aquí está el CHANGELOG de Rails 5 ActiveRecord :
fuente
Carriles 5.1
o
fuente
La forma correcta de hacer esto es Model.table_exists?
fuente