01-10-2010, 10:21 AM
(Modification du message : 01-10-2010, 10:23 AM par Sephi-Chan.)
Crée plutôt un nouveau sujet pour ce genre de question, assez spécifique.
Je n'utilise pas souvent ces callbacks (ils sont peu utilisés de manière générale, car leur documentation est assez succinte et que leur implémentation initiale était un peu bancale) et je ne peux pas faire de test dans l'immédiat, mais j'ai peut-être des pistes.
Es-tu sûr que self correspond bien à ton objet (je ne sais pas dans quelle classe tu es puisque tu as tronqué ton modèle) ?
La méthode update_attribute effectue une sauvegarde de l'objet, tu n'as pas besoin d'appeler save derrière.
Enfin, cette manipulation devrait plutôt se faire dans le callback after_create de ton modèle de relation, puisque after_add est appelé même si l'association n'est pas sauvegardé en base de données alors que dans l'esprit, tu ne veux passer le status à 1 que si tu as atteint les 6 joueurs. D'ailleurs, je te conseille d'utiliser une constante avec un nom parlant plutôt qu'un nombre (même si cette constante contient en effet un nombre).
Exemple si j'implémentais ça comme je te le conseille (en extrapolant sur les modèles) :
Quand je serais chez moi, je ferais quelques essais pour t'indiquer comment ça aurait pu avoir le comportement souhaité.
Sephi-Chan
Je n'utilise pas souvent ces callbacks (ils sont peu utilisés de manière générale, car leur documentation est assez succinte et que leur implémentation initiale était un peu bancale) et je ne peux pas faire de test dans l'immédiat, mais j'ai peut-être des pistes.
Es-tu sûr que self correspond bien à ton objet (je ne sais pas dans quelle classe tu es puisque tu as tronqué ton modèle) ?
La méthode update_attribute effectue une sauvegarde de l'objet, tu n'as pas besoin d'appeler save derrière.
Enfin, cette manipulation devrait plutôt se faire dans le callback after_create de ton modèle de relation, puisque after_add est appelé même si l'association n'est pas sauvegardé en base de données alors que dans l'esprit, tu ne veux passer le status à 1 que si tu as atteint les 6 joueurs. D'ailleurs, je te conseille d'utiliser une constante avec un nom parlant plutôt qu'un nombre (même si cette constante contient en effet un nombre).
Exemple si j'implémentais ça comme je te le conseille (en extrapolant sur les modèles) :
class GameTeam < ActiveRecord::Base
belongs_to :game
belongs_to :team
after_create et_status
private
def set_status
if game.teams.count == 6
game.update_attribute(tatus, GAME::STARTED)
end
end
end
Quand je serais chez moi, je ferais quelques essais pour t'indiquer comment ça aurait pu avoir le comportement souhaité.
Sephi-Chan