J'utilise RoR et je veux faire des requêtes de mise à jour de sécurité simultanée. Par exemple, quand jeRuby On Rails: Comment faire pour exécuter des mises à jour sécurisées
var user = User.find(user_id)
user.visits += 1
Je reçois le code SQL suivant:
SELECT * FROM Users WHERE ID=1 -- find user's visits (1)
UPDATE Users SET Visits=2 WHERE ID=1 -- 1+1=2
Mais s'il y a plusieurs questions qui se déroulent en même temps, il y aura des problèmes de verrouillage.
Selon l'API RoR, je peux utiliser: lock => true, mais ce n'est pas ce que je veux.
J'ai trouvé une fonction impressionnante update_counters:
User.update_counters(my_user.id, :visits => 1)
Cela donne le code SQL suivant
UPDATE Users SET Visits=Visits+1 WHERE [email protected]
fonctionne très bien!
Maintenant, ma question est comment puis-je remplacer la fonction + = pour faire la chose update_counters à la place?
Parce que
user.visits += 1 # better
User.update_counters(my_user.id, :visits => 1) # than this
MISE À JOUR
Je viens de créer la fonction suivante
class ActiveRecord::Base
def inc(column, value)
User.update_counters(self.id, column => value)
end
end
Existe-t-il d'autres meilleures idées?
increment_counter l'augmente de 1, parfois j'ai besoin de valeurs différentes. Merci quand même. – Alex