2009-08-12 8 views
9

Ich habe ein Comment Modell, das belongs_to ein Message. In comments.rb habe ich folgendes:Verwendung: counter_cache und: berühren Sie in der gleichen Zuordnung

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

Ich habe dies getan, weil die counter_cache Aktualisierung nicht die updated_at Zeit des Message nicht aktualisiert, und ich würde es gerne für die cache_key.

Allerdings, wenn ich in meinem Protokoll sah bemerkte ich, dass dies bewirkt, dass zwei separate SQL-Updates

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 

Gibt es eine Möglichkeit, dies mit nur einem SQL-Aufruf durchgeführt werden?

Bearbeiten Ich bemerkte auch, dass es eine SELECT der Nachricht im Voraus tut. Ist das auch nötig?

+0

noch wie die – juanpastas

+0

Es ist Wow, wirklich? Sieben Jahre später? Das ist verrückt. –

Antwort

4

Es führt wahrscheinlich zwei Abfragen durch, weil es noch nicht optimiert wurde.

Warum nicht verzweigen und einen Patch erstellen: D

Verwandte Themen