Comment supprimer tous les enregistrements de l'une de mes tables de base de données dans une application Ruby on Rails?
Comment supprimer tous les enregistrements de l'une de mes tables de base de données dans une application Ruby on Rails?
Réponses:
Si vous cherchez un moyen d'y parvenir sans SQL, vous devriez pouvoir utiliser delete_all.
Post.delete_all
ou avec un critère
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Voir ici pour plus d' informations.
Les enregistrements sont supprimés sans les charger au préalable, ce qui le rend très rapide mais cassera des fonctionnalités telles que le cache de compteur qui dépend du code de rails à exécuter lors de la suppression.
ActiveRecord
modèles. La question porte sur la suppression d'un enregistrement d'une «table» et je ne fais que pointer ou l'hypothèse contenue dans la réponse.
Si vous voulez dire supprimer toutes les instances de tous les modèles, j'utiliserais
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
chaque fois que vous avez besoin d'utiliser une expression if à l'intérieur d'un bloc, de cette façon vous évitez d'avoir à chaîner la méthode compacte pour supprimer les éléments nil.
BlogPost.find_each(&:destroy)
Si votre modèle s'appelle BlogPost, ce serait:
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
Réponse plus récente dans le cas où vous souhaitez supprimer toutes les entrées de toutes les tables:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
Plus d'informations sur eager_load
ici .
Après l'avoir appelé, nous pouvons accéder à tous les descendants de ActiveRecord::Base
et nous pouvons appliquer un delete_all
sur tous les modèles.
Notez que nous nous assurons de ne pas effacer la table SchemaMigration.