J'ai un modèle Note, avec un champ note_type. Comment écrire une migration qui supprimera les enregistrements de notes de la base de données si le type est "short_note"?Comment écrire une migration qui va supprimer certains enregistrements de ma base de données?
Répondre
Le code lui-même est simple.
Note.delete_all :type => 'short_note'
(Si les notes ont détruit callbacks, vous devrez exécuter destroy_all
à la place. Il est plus lent parce qu'ils sont supprimés un par un, mais peut parfois produire une meilleure intégrité des données.)
Cependant , J'imagine que vous êtes un peu plus inquiet de la migration vers le bas que de la migration vers le haut. C'est une transformation irréversible par nature. La réponse à cette partie particulière de la question est que votre migration devrait déclencher une exception ActiveRecord::IrreversibleMigration
. Toutefois, chaque fois que vous écrivez une migration irréversible, il est important de savoir pourquoi vous le faites. Selon votre situation, il est peut-être plus approprié d'exécuter cette commande particulière dans la console lors du déploiement en production que de faire de cette migration une partie de la définition même de votre application.
def self.up
execute "DELETE FROM notes WHERE note_type = 'short_note'"
end
:-P
Just kidding. Je suis sûr que vous pouvez le faire:
Note.delete_all :note_type => 'short_note'
Dans le self.up:
Note.delete_all("type = 'short_note'");
ou utiliser destroy_all qui fera appel à détruire la méthode de l'enregistrement et callbacks (before_destroy et after_destroy):
Note.destroy_all("type = 'short_note'");
Je préfère largement utiliser les formes de hachage et/ou de tableau lorsque cela est possible, et n'utiliser la forme de chaîne que lorsque je dois écrire directement en SQL. De cette façon, personne n'est tenté de le refactoriser dans un formulaire ouvert à l'injection SQL au cas où il souhaite supprimer un type paramétré. –
Comment nous allons écrire si la valeur est nulle. '" type = NULL "' ?? –
- 1. Comptabiliser certains enregistrements dans la base de données
- 2. Comment supprimer une base de données MySQL?
- 3. Comment puis-je supprimer des enregistrements d'une table qui ont certains critères?
- 4. Insertion de données après une migration de données de base
- 5. Comment puis-je supprimer certains personnages de ma chaîne
- 6. Comment écrire une requête mysql qui va lire les données d'une table et écrire dans une autre?
- 7. Données de base: post-migration, code de migration supplémentaire
- 8. Sqlite3 base de données rails comment supprimer tous les enregistrements de la ligne de commande
- 9. Migration de base de données MySQL UTF8
- 10. Comment supprimer des enregistrements base sur une date et offset
- 11. Migration de données dans une migration de rails
- 12. Migration de base de données en C#
- 13. Tri des enregistrements de base de données
- 14. Comment écrire une instruction if qui vérifie les entrées de base de données en double?
- 15. Migration de base de données JDBC SQL Server
- 16. lire une base de données oracle écrire dans une autre base de données oracle
- 17. Migration d'une base de données MySQL de développement vers une base de données de production
- 18. Comment faire la migration de base de données Rails3 + datamapper
- 19. Comment synchroniser ma base de données Firebird locale avec une autre base de données Firebird?
- 20. Pourquoi cette simple migration de Rails ne met-elle pas à jour ma base de données?
- 21. Supprimer les enregistrements de la base de données avec une requête Ajax
- 22. ce qui ne va pas avec ma version de _bittestandset
- 23. Fullcalendar lien dans ma base de données
- 24. Comment supprimer une partie de ma chaîne?
- 25. Comment supprimer automatiquement les anciens enregistrements d'une table de base de données?
- 26. Supprimer les enregistrements les plus anciens de la base de données
- 27. Comment puis-je supprimer toutes les sessions se connectant à ma base de données Oracle?
- 28. Comment générer une liste XML de certains champs de ma base de données dans Ruby on Rails?
- 29. Comment puis-je les écrire dans ma base de données comme Null au lieu de Nothing
- 30. Comment quelqu'un va écrire une "macro" en C#?
Non, ne spécifiez pas la clé ': conditions'! La méthode 'delete_all' prend juste des conditions, pas une spécification générale' find'. –
@Chris Jester-Young: bonne prise :) Fixe. – Matchu