J'ai une tâche de râteau qui ne fonctionnera que si une table existe. Je travaille avec plus de 20 ingénieurs sur un site Web, je veux donc m'assurer qu'ils ont migré la table avant de pouvoir effectuer une tâche de râteau qui alimentera cette table respective.
AR a-t-il une méthode telle que Table.exists
? Comment puis-je m'assurer que la migration de la table a réussi?
ruby-on-rails
ruby
rails-activerecord
rails-migrations
alorsengah
la source
la source
rake db:migrate
échouera.)Réponses:
Dans Rails 5, l' API est devenue explicite concernant les tables / vues , collectivement sources de données .
Dans Rails 2, 3 et 4, l'API concerne les tables .
Obtenir l'état des migrations:
Si vous avez besoin de plus d'API pour les migrations ou les métadonnées, consultez:
c'est la
ActiveRecord::Base
classe de laschema_migrations
tableoù toute l'action se produit lors de l'exécution des migrations
la source
ActiveRecord::Base.connection.table_exist 'users'
vérifierait une table d'utilisateurs.ActiveRecord::Base.connection.table_exists? 'kittens
vérifierait une table Kitten. Sauf si j'ai détruit tous les chatons!drop_table :kittens
.index_exists?('kittens', 'paws')
drop_table(:hosts_users) if table_exists? :hosts_users
ActiveRecord::Base.connection.data_source_exists? 'table_name'
est le bon maintenantmême si la table n'existe pas:
modèle
Kitten
,kittens
rails de table attendus 3:Kitten.table_exists? # => faux
la source
J'ai découvert cela pendant que j'essayais de supprimer une table via une migration:
fonctionne pour Rails 3.2
Ce formulaire plus simple sera disponible dans Rails 5:
Référence: https://github.com/rails/rails/pull/16366
Et voici le CHANGELOG de Rails 5 ActiveRecord :
la source
Rails 5.1
ou
la source
La bonne façon de faire est Model.table_exists?
la source