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.
