2009-07-31 8 views
1

J'essaie de charger des Rake Fixtures (rake db: fixtures: load) dans une base de données MySql et je vois un comportement bizarre avec les valeurs AutoIncrement. Normalement cela augmente de 1 pour chaque insertion ce qui me permet de définir/créer des tests. (BTW - normal créer/insérer à partir du script fonctionne correctement).Rails Rake MySql Autoincrement Problème w db: fixtures: load

Cependant, lorsque je charge à partir d'appareils, le champ id est affecté d'un grand nombre aléatoire et la valeur autoinc sur la table est également un grand nombre (1054583385) après la charge. Quelqu'un d'autre a-t-il vu cela? FWIW c'est sur Windows XP avec MySql 5.0 (j'ai aussi testé avec MySQL 5.1, j'ai trouvé le problème et j'ai ramené à 5.0).

Quelqu'un d'autre a vu ceci - Est-ce un bug/problème connu?

TIA,

Répondre

1

Ce n'est pas un comportement anormal pour les appareils de rails. C'est, par conception, un hash aléatoire basé sur l'étiquette de votre appareil. Voir le documentation.

Vous pouvez spécifier explicitement un ID dans vos appareils si nécessaire.

id: 1 

Mais est-ce vraiment important? Les appareils sont destinés à être utilisés pour des tests. L'ID de vos objets n'est pas pertinent tant que les relations sont là.

est ici la fonction correspondante de la classe fixtures:

# Returns a consistent identifier for +label+. This will always 
# be a positive integer, and will always be the same for a given 
# label, assuming the same OS, platform, and version of Ruby. 
def self.identify(label) 
    label.to_s.hash.abs 
end 
+0

Thx pour l'info - Je suis encore à apprendre. Puisque j'essaie de définir/créer des relations de données parent/enfant/petit-enfant pour mon test, cela importe dans ce cas. Peut-être y a-t-il une meilleure façon (plus de Rails-ish) de le faire - mais j'ai besoin de créer des données avec des relations spécifiques (je suis en train de tester certaines requêtes d'exploration de rapports). Par conséquent, je voulais être en mesure de prédire les valeurs de fk à l'avance. – BrendanC

+0

Si vos relations a et appartient sont correctement définies, vous n'avez jamais à vous soucier des valeurs de clé étrangère. Utilisez les outils fournis par ActiveRecord. – hobodave

Questions connexes