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.

Répondre à