2009-08-12 7 views
9

J'ai un Comment modèle que belongs_to un Message. En comments.rb je donne les résultats suivants:Utilisation: counter_cache et: touch dans la même association

class Comment < ActiveRecord::Base 
    belongs_to :message, :counter_cache => true, :touch => true 
end 

Je l'ai fait parce que la mise à jour de la counter_cache ne met pas à jour le temps de la updated_atMessage, et je voudrais à la cache_key.

Cependant, quand je regardais dans mon journal je remarquai que cela provoque deux mises à jour SQL séparées

Message Load (4.3ms) SELECT * FROM `messages` WHERE (`messages`.`id` = 552) 
Message Update (2.2ms) UPDATE `messages` SET `comments_count` = COALESCE(`comments_count`, 0) + 1 WHERE (`id` = 552) 
Message Update (2.4ms) UPDATE `messages` SET `updated_at` = '2009-08-12 18:03:55', `delta` = 1 WHERE `id` = 552 

Est-il possible, cela peut être fait avec un seul appel SQL?

Modifier J'ai également remarqué qu'il fait un SELECT du message au préalable. Est-ce aussi nécessaire?

+0

Il est toujours comme ça – juanpastas

+0

Wow, vraiment? Sept ans plus tard? C'est fou. –

Répondre

4

Il fait probablement deux requêtes car il n'a pas encore été optimisé.

? Pourquoi ne pas créer et un patch: D

Questions connexes