我有一个评论模型,它属于一条消息。在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,这个步骤必要吗?