0
votes

Migration pour créer une table déjà présente dans la base de données

J'ai créé une table PSQL via la console PSQL. J'ai créé un modèle dans des rails pour la table correspondante. Maintenant, si je veux écrire une migration pour créer une table de sorte que quelqu'un qui utilise mon code n'a pas besoin de créer une table via la console PSQ, et il ne faut pas également supprimer la table pour moi lors de la migration. Comment résoudre ceci.


0 commentaires

3 Réponses :


0
votes

rails encourage les développeurs à modifier leur base de données uniquement via des fichiers de migration. Parce que lorsque vous modifiez des modifications manuelles, schema.rb n'est pas mis à jour. Cela rendra le schéma d'autres développeurs incompatibles avec le vôtre.

Si vous avez créé une table dans votre base de données locale manuellement, vous pouvez déposer la table manuellement et créer un nouveau fichier de migration. Ensuite, si vous exécutez le fichier de migration, il créera la table et la mise à jour schema.rb en conséquence.

Si vous souhaitez toujours écrire la migration uniquement pour les autres développeurs, vous pouvez créer une migration avec la table Create, puis le commenter tout en exécutant la migration. schema.rb sera maintenant mis à jour avec la nouvelle table car les rails essaient automatiquement pour synchroniser votre base de données avec le fichier schema.rb chaque fois que vous exécutez une commande db. Maintenant, entraînez le changement de migration et appuyez sur vos modifications pour d'autres développeurs pour obtenir la table.


6 commentaires

Je ne veux pas laisser tomber la table.


Nous n'avons même pas schema.db fichier dans notre projet.


@Alekseimatiushkin Solution fonctionne, mais conduira probablement à la DB IncoSistance entre l'auteur et les autres projets de projets de projets. De plus, il n'y a aucune garantie qui bloque do ... fin fonctionne. Donc, Lénine a raison: le schéma DB doit être géré via des migrations. Les données existantes peuvent être repeuplées via graines ou rake tâches.


@Alekseimatiuskin n'est pas d'accord avec chaque phrase. De plus, aucune des phrases ne contestait pas l'incohérence DB ou le mauvais do ... fin bloc.


@Alekseimatiushkin à côté des faits est loin d'être loin d'être idéal, "Beaucoup de sociétés qui ..." n'est pas un argument (juste parce que "Sociétés ... moderne ... utilise * schéma .rb ">> " ... qui a laissé tomber un "). Mais que deux problèmes sont les vrais.


Les guides de rails officiels indiquent toujours: "Le db / schema.rb ou dB / structure.sql est un instantané de l'état actuel de votre base de données et est la source faisant autorité pour reconstruire cette base de données. "



2
votes

0 commentaires

2
votes

Si vous lisez cette réponse et que vous êtes sur Rails 6, un nouveau drapeau a été ajouté à #create_table dans Rails 6 Beta1 Pour résoudre ce problème exact.

Exemple: < / strong> xxx


1 commentaires

Je pense que vous pourriez supprimer "beta 1" ; Le drapeau a été ajouté dans rails v6 :)