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.
