2009-08-12 6 views
9

Tengo un modelo Comment que belongs_to a Message. En comments.rb Tengo el siguiente:Usando: counter_cache y: toque en la misma asociación

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

que he hecho esto porque la actualización del counter_cache no actualiza el tiempo updated_at del Message, y me gustaría que para el cache_key.

Sin embargo, cuando miré en mi registro me di cuenta de que esto provoca dos actualizaciones de SQL separadas

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 

¿Hay alguna manera esto se puede hacer con sólo una llamada SQL?

Editar También me di cuenta de que hace un SELECCIONAR el Mensaje de antemano. ¿Eso también es necesario?

+0

Es todavía como que – juanpastas

+0

Wow, realmente? ¿Siete años despues? Eso es una locura –

Respuesta

4

Probablemente haga dos consultas porque aún no se ha optimizado.

¿Por qué no se ramifican y crear un parche: D

Cuestiones relacionadas