我正在使用 acounter_cache
让 MySQL 为我做一些簿记:
class Container
has_many :items
end
class Item
belongs_to :container, :counter_cache => true
end
现在,如果我这样做:
container = Container.find(57)
item = Item.new
item.container = container
item.save
INSERT
在 SQL 日志中,后面会有类似的内容:
UPDATE `containers` SET `items_count` = COALESCE(`items_count`, 0) + 1
WHERE `containers`.`id` = 57
这是我期望它做的。然而,这container[:items_count]
将是陈旧的!
...除非我container.reload
拿起更新的价值。在我看来,这有点违背了使用 :counter_cache 来支持自定义构建的部分目的,特别是因为reload
在我尝试访问该items_count
属性之前我可能实际上并不想要一个。(由于域逻辑的性质,我的模型代码量很大,所以有时我必须在一个控制器调用中保存和创建多个东西。)
我知道我可以自己修改回调,但在我看来,这似乎是对简单功能的一个相当基本的期望。同样,如果我必须编写额外的代码以使其完全工作,那么实现自定义计数器可能会更容易。
我在做什么/假设错了?