Je fais des travaux de maintenance sur un site Rails existant et j'ai quelques problèmes provenant d'associations many-to-many. Il semble que le site a été initialement construit en utilisant has_and_belongs_to_many
pour quelques relations qui se sont compliquées depuis dans la logique métier, donc je dois utiliser has_many :through
à la place pour supporter des champs supplémentaires dans la table de relation. Cependant, la table de jointure initialement utilisée pour HABTM n'a pas de clé primaire, et je dois en ajouter une pour prendre en charge la modélisation de relation séparée en utilisant has_many :through
.Modélisation de Rails: convertir HABTM en has_many: à travers
Quelle est la meilleure façon d'ajouter une clé primaire à une table existante avec beaucoup de données? Y a-t-il une autre façon de faire ce que j'essaie de faire? Par ailleurs, le système fonctionne sur Oracle.
Merci!
Justin
MISE À JOUR 11/9/09 15h58: Je ne suis pas un expert Oracle et ont été se perdre dans les terres sauvages des versions d'Oracle de non nulle, auto-incrément, et ainsi de suite. Au début, j'ai essayé de faire ce que Mike et Corey recommandaient en ajoutant un nouveau champ comme clé primaire, mais Oracle ne me laisserait pas ajouter un champ non nul à une table non vide (ORA-01758). J'ai alors exporté les données comme SQL, ai laissé tomber les rangées, ai ajouté le PK et l'ai établi pour non-nul, alors ai essayé d'importer les données, mais j'ai continué à obtenir des erreurs au motif de "ne peut pas insérer NULL dans l'id ..." (ORA-01400). Enfin, j'ai essayé d'utiliser une migration comme le suggère Corey dans son commentaire, mais rake a rencontré les mêmes erreurs qu'Oracle lançait quand j'ai modifié manuellement la base de données ("impossible d'ajouter un champ non nul à une table non vide"). J'ai effacé la table, exécuté la migration (qui a fonctionné), puis essayé de réimporter les données, mais j'ai eu les mêmes erreurs la dernière fois que j'avais essayé d'importer ("impossible d'insérer NULL dans l'id ..."). Comment puis-je sauvegarder mes données et ajouter les clés primaires dont j'ai besoin? Je sais que la possibilité d'écrire une tâche râteau a été suggérée, mais je ne suis pas sûr de savoir comment procéder sur ce front. Des idées?
Voir aussi cette question plus récente et ses réponses: http://stackoverflow.com/questions/16159134/how-to-migrate-has-and-belongs-to-many-to-has-many-through/29067732# 29067732 – MZB