2009-08-12 61 views
9

我有一個Comment模型belongs_to一個Message。在comments.rb我有以下幾點:使用:counter_cache和:觸摸同一關聯

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

我已經做到了這一點,因爲更新counter_cache不更新updated_at時間Message的,而且我也喜歡爲cache_key

然而,當我在我的日誌看我注意到,這會導致兩個單獨的SQL更新

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 

有什麼辦法這個只能與一個SQL調用來完成?

編輯我也注意到它事先做了一個SELECT消息。這也是必要的嗎?

+0

它還是這樣 – juanpastas 2016-08-02 02:55:26

+0

哇,真的嗎?七年後?太瘋狂了。 – 2016-08-29 17:05:29

回答

4

它可能做兩個查詢,因爲它尚未優化。

爲什麼不分支並創建一個補丁:D