论坛首页 编程语言技术论坛

counter_cache失效一例

浏览 3176 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-27   最后修改:2009-07-27
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


目前我使用的是后者。
   发表时间:2009-07-27  
使用数据库的trigger无疑是最有效的方法
0 请登录后投票
   发表时间:2009-07-27   最后修改:2009-07-27
在 rails 中, delete 和 destroy 是有区别的,后者触发钩子方法,前者就是 sql delete。 把 :delete_all 换成 :destroy_all 试一下。
0 请登录后投票
   发表时间:2009-07-31  
我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过?
0 请登录后投票
   发表时间:2009-08-02  
http://rainlife.iteye.com/blog/417980
0 请登录后投票
   发表时间:2009-08-03  
saberma 写道
我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过?


呵呵,我读书太少,汗颜。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics