Rails counter_cache 什么时候在数据库建立 count 字段

Trump · 2016年11月30日 · 最后由 jasl 回复于 2016年11月30日 · 1860 次阅读

要不要再 migration 中声明建立?以前的一个项目有用到 counter_cache,忘了当时是怎么建的字段了,难道是手工改的数据库?

需要在 migration 中声明

要自己建立的

网上搜了搜,不好自定义 condition,还是自己写方法更新这个字段好了

#4 楼 @kikyous 谢谢,早晨搜到了这个 gem,还找到一个 https://github.com/cedric/custom_counter_cache ,感觉都不够优雅,用起来也挺麻烦,还不如在 after_create 和 after_destroy 里面调用函数来的方便。

感觉这样会比较优雅,直接把

belongs_to :author, counter_cache: true

改成

belongs_to :author, counter_cache: { ...conditions... }

把 true 换成一个 proc,直接在里面定义 condition,或者是更复杂的运算。

总统先生...Rails 自带的 Counter Cache 有一致性问题,而且框架层面很难做到不 Bug

比如你试试类似的场景

post.author = user2
post.save
user1.posts_count # 这里的数值可能没有正确减少1
需要 登录 后方可回复, 如果你还没有账号请 注册新账号