在同一个关联中使用:counter_cache和:touch

9

我有一个评论模型,它属于一条消息。在comments.rb文件中,我有以下代码:

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

我这样做是因为更新counter_cache不会更新Message的updated_at时间,而我希望它能够更新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语句来获取Message,这个步骤必要吗?

还是这样 - sites
哇,真的吗?七年后了?太疯狂了。 - Matt Grande
1个回答

3
它可能执行了两个查询,因为它还没有被优化。为什么不分支并创建一个补丁呢:D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接