`
wangxb_st
  • 浏览: 5021 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

counter_cache失效一例

阅读更多
counter_cache的问题
counter_cache在模型上控制计数器的变化,因此当模型发生new和delete时候触发,但对于依赖模型使用的

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :delete_all
end


由于删除topic时,生成的SQL语句如下:

DELETE FROM `topics` WHERE `id` = 13
DELETE FROM `posts` WHERE (topic_id = 13)


没有触发counter_cache,导致counter_cache计算错误。


解决的办法:

1、不使用counter_cache
2、使用
class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
end


目前我使用的是后者。
分享到:
评论
5 楼 wangxb_st 2009-08-03  
saberma 写道
我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过?


呵呵,我读书太少,汗颜。
4 楼 rainlife 2009-08-02  
http://rainlife.iteye.com/blog/417980
3 楼 saberma 2009-07-31  
我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过?
2 楼 koalant 2009-07-27  
在 rails 中, delete 和 destroy 是有区别的,后者触发钩子方法,前者就是 sql delete。 把 :delete_all 换成 :destroy_all 试一下。
1 楼 花花公子 2009-07-27  
使用数据库的trigger无疑是最有效的方法

相关推荐

Global site tag (gtag.js) - Google Analytics