25-09-2011, 12:31 PM
(Modification du message : 02-10-2011, 08:51 PM par Sephi-Chan.)
Salut! Non pas que je veuilles flooder, mais je suis actuellement en "plein boom". Et qui dis plein boom dis plein de bug XD.
Mon soucis actuel est le suivant:
à la création de chaque compte joueur, une sequence est créé. Ceci dans le but que les fourmis de chaques joueurs soient uniques:
Joueur1:
fourmis 1
fourmis 2
fourmis 3
Joueur2:
fourmis 1
fourmis 2
fourmis 3
La création de la sequence marche impecablement via cette instruction:
Mais à la création de chaque fourmis, j'ai un léger problème. Le joueur peut choisir autant de fourmis qu'il veut créé, je dois donc à chaque fois:
créé l'objet fourmis, lui assigné pour nom la prochaine valeur de la sequence donc en même temps incrémenté la sequence.
Mon soucis est que cette instruction est dans une boucle que voici:
Mais mon instruction nextval(sequence), est incrémenté une seule fois puis assigné à toute les fourmis. Ainsi le joueur qui cré ses fourmis deux par deux se retrouves avec:
fourmis 1
fourmis 1
fourmis 2
fourmis 2
fourmis 3
fourmis 3
...
Quelqu'un as-t'il déjà était confronté à ce problème? Je peut très bien stocké la valeur du nextval avant de boucler, lui ajouter i à chaque passage de boucle et en fin de boucle stocké le nom de la dernière fourmis dans la sequence, mais c'est un peu primitif je trouves ,)
EDIT: Ok, j'ai trouvé le problème:
Les requêtes sont mises en cache! Maintenant il n'y a plus qu'à résoudre =)
EDIT²: Ok, résolu grâce à la fonction ActiveRecord::Base.connection.disable_query_cache!
Mon soucis actuel est le suivant:
à la création de chaque compte joueur, une sequence est créé. Ceci dans le but que les fourmis de chaques joueurs soient uniques:
Joueur1:
fourmis 1
fourmis 2
fourmis 3
Joueur2:
fourmis 1
fourmis 2
fourmis 3
La création de la sequence marche impecablement via cette instruction:
ActiveRecord::Base.connection.execute("CREATE SEQUENCE fourmis_" + current_user.username + "_id_seq MINVALUE 0")
Mais à la création de chaque fourmis, j'ai un léger problème. Le joueur peut choisir autant de fourmis qu'il veut créé, je dois donc à chaque fois:
créé l'objet fourmis, lui assigné pour nom la prochaine valeur de la sequence donc en même temps incrémenté la sequence.
Mon soucis est que cette instruction est dans une boucle que voici:
for i in 0 .. @quantity
current_user.city.ants.build(ort => "bip",
:born => Time.now + i*6 + @decalage,
:name => ActiveRecord::Base.connection.select_value("SELECT nextval('fourmis_" + current_user.username + "_id_seq')"))
end
Chaque fourmis est créé impecablement, je parles notament du champs "born", qui est très bien incrémenter de 6secondes à chaque passage de boucle.Mais mon instruction nextval(sequence), est incrémenté une seule fois puis assigné à toute les fourmis. Ainsi le joueur qui cré ses fourmis deux par deux se retrouves avec:
fourmis 1
fourmis 1
fourmis 2
fourmis 2
fourmis 3
fourmis 3
...
Quelqu'un as-t'il déjà était confronté à ce problème? Je peut très bien stocké la valeur du nextval avant de boucler, lui ajouter i à chaque passage de boucle et en fin de boucle stocké le nom de la dernière fourmis dans la sequence, mais c'est un peu primitif je trouves ,)
EDIT: Ok, j'ai trouvé le problème:
Citation : (8.6ms) SELECT nextval('fourmis_Maz_id_seq')
CACHE (0.0ms) SELECT nextval('fourmis_Maz_id_seq')
CACHE (0.0ms) SELECT nextval('fourmis_Maz_id_seq')
CACHE (0.0ms) SELECT nextval('fourmis_Maz_id_seq')
CACHE (0.0ms) SELECT nextval('fourmis_Maz_id_seq')
Les requêtes sont mises en cache! Maintenant il n'y a plus qu'à résoudre =)
EDIT²: Ok, résolu grâce à la fonction ActiveRecord::Base.connection.disable_query_cache!