Bonjour,

j'arrive un peu tard, mais Rails implémente ça directement :
http://apidock.com/rails/ActiveRecord/Locking/Optimistic

++
David

Le 19 mars 2010 14:53, Florent Florent <[email protected]> a écrit :

> Le 18 mars 2010 02:41, Guillaume Betous <[email protected]> a
> écrit :
>
>
>> Merci Michel & Guillaume pour vos réponses ! Après consultation des
>>> utilisateurs de l'appli, ta solution Guillaume leur suffit. Du coup c'est
>>> celle que j'ai retenue car c'est plus simple à implémenter.
>>>
>>
>> Attention, il faut que tu rendes atomique (c'est à dire ininterruptible)
>> l'action "je relis pour vérifier que l'enregistrement n'a pas bougé puis je
>> savue une nouvelle version". Je crois que c'est le concept des transactions
>> [1] (je l'ai jamais mis en oeuvre mais j'y avais jeté un oeil pour un projet
>> perso).
>>
>> Sinon tu risques le scénario suivant :
>> A lit l'enregistrement en version x
>> A édite l'enregistrement
>> B lit l'enregistrement en version x
>> B edite l'enregistrement
>> A vérifie l'enregistrement toujours en x => OK
>> B vérifie l'enregistrement toujours en x => OK
>> A sauve et passe en version x+1
>> B écrase la sauvegard de A et passe aussi en x+1
>>
>> gUI
>>
>> [1]
>> http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
>>
>>
>
> Effectivement, je n'avais pas pensé à ce cas, merci Guillaume. J'ai
> consulté la page de l'API que tu as pointée, elle dit :
>
> "Both Base#save and Base#destroy come wrapped in a transaction that ensures
> that whatever you do in validations or callbacks will happen under the
> protected cover of a transaction."
>
> J'ai implémenté sous forme de validation la vérification qu'un
> enregistrement est toujours en version x, donc si je comprends bien le texte
> la vérification et la sauvegarde ont lieu dans une même transaction.
>
> Même si ce n'est pas le cas, je crois que je vais passé outre le cas de
> figure du problème d'un enregistrement (quasi) simultané par 2 utilisateurs,
> car dans mon application les fréquences d'enregistrement sont faibles.
>
> Florent
>
> --
> 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]
>
> To unsubscribe from this group, send email to railsfrance+
> unsubscribegooglegroups.com or reply to this email with the words "REMOVE
> ME" as the subject.
>

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

To unsubscribe, reply using "remove me" as the subject.

Répondre à