oui, c'est pas mal comme solution. je vais tenter ça. merci !
gUI Le 4 février 2009 10:41, Michel Belleville <[email protected]> a écrit : > (bon je m'apercois en me relistant que j'ai oublié des indentations et des > 'end' mais le principe reste valable) > > Michel Belleville > > > 2009/2/4 Michel Belleville <[email protected]> > > Sinon, tu peux faire une méthode qui décore create en mettant une >> transaction autour, du genre : >> >> class Mission < AR::B >> ... >> def create_according_to_stock(*args, &block) >> self.transaction do >> self.create(args, block) >> end >> ... >> end >> >> Et dans ton contrôleur, tu appelles ta méthode décorante à la place du >> create normal. >> >> Michel Belleville >> >> >> 2009/2/4 Fabien Jakimowicz <[email protected]> >> >> >>> 2009/2/4 Guillaume Betous <[email protected]>: >>> > Bonjour, j'ai 2 modèles qui, au niveau métier sont liés de la manière >>> > suivante : >>> > >>> > - Une classe AR "production" contient entre autre une info de stock >>> (dans le >>> > sens quantité) >>> > - Une classe AR "mission" puise dans ce stock pour apporter (camion) de >>> la >>> > marchandise vers une autre ville >>> > - Une mission n'est possible que si le stock correspondant est >>> strictement >>> > positif. >>> > >>> > Jusqu'à présent tout se passe dans la classe "mission" : >>> > - un "validate_on_create" s'assure que le stock est suffisant >>> > - un "after_create" décrémente le stock de la valeur correspondant à la >>> > mission >>> > >>> > Mon soucis est de rendre ça atomique : lors d'un accès concurrent au >>> meme >>> > stock, je ne veux pas que 2 personnes pensent qu'il y a du stock, que >>> les 2 >>> > décrémentes, et que finalement le stock devienne négatif vu qu'en fait >>> il >>> > n'y en avait pas pour les 2. >>> > >>> > J'ai bien vu les transactions[1], mais je ne sais pas comment faire >>> pour la >>> > mettre dans le modèle, vu que ça touche des actions avant et après la >>> > création. >>> > >>> >>> Je pense que pour être vraiment sur du résultat, tu devrais utiliser >>> des contraintes sur ta base de données directement. >>> >>> -- >>> http://fabien.jakimowicz.com >>> >>> >>> >> > > > > -- Pour la santé de votre ordinateur, préférez les logiciels libres. Lire son mail : http://www.mozilla-europe.org/fr/products/thunderbird/ Browser le web : http://www.mozilla-europe.org/fr/products/firefox/ Suite bureautique : http://fr.openoffice.org/ --~--~---------~--~----~------------~-------~--~----~ Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups. Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse [email protected] Pour résilier votre abonnement envoyez un e-mail à l'adresse [email protected] -~----------~----~----~----~------~----~------~--~---
