我使用的是counter_cache
让MySQL的做一些簿记对我说:counter_cache不更新的模型保存后
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
SQL日志会有一个INSERT
其次是这样的:
UPDATE `containers` SET `items_count` = COALESCE(`items_count`, 0) + 1
WHERE `containers`.`id` = 57
这是我的前把它做了。但是,container[:items_count]
将陈旧!
...除非我container.reload
拿起更新的值。在我的脑海里,有些人认为使用:counter_cache支持定制内容的一部分目的,特别是因为在尝试访问items_count
属性之前,我实际上可能不需要reload
。 (由于域逻辑的性质,我的模型非常密码化,所以我有时必须在一次控制器调用中保存并创建多件事情。)
我知道我可以自己修改回调,但在我看来,这似乎是对简单功能的一个相当基本的期望。同样,如果我必须编写额外的代码才能使其完全工作,那么实现自定义计数器可能会更容易。
我在做什么/假设错误?
这有效。我发现它不一致,它是一种方式而不是另一种。 – sehnsucht
对我来说这不起作用!只有在重载计数器更新后。我尝试了各种样式'create','create!','build.save!'。 – pablo