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]
-~----------~----~----~----~------~----~------~--~---

Répondre à