浏览 3176 次
锁定老帖子 主题:counter_cache失效一例
精华帖 (0) :: 良好帖 (0) :: 新手帖 (7) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-27
最后修改:2009-07-27
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 目前我使用的是后者。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-27
使用数据库的trigger无疑是最有效的方法
|
|
返回顶楼 | |
发表时间:2009-07-27
最后修改:2009-07-27
在 rails 中, delete 和 destroy 是有区别的,后者触发钩子方法,前者就是 sql delete。 把 :delete_all 换成 :destroy_all 试一下。
|
|
返回顶楼 | |
发表时间:2009-07-31
我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过? |
|
返回顶楼 | |
发表时间:2009-08-02
http://rainlife.iteye.com/blog/417980
|
|
返回顶楼 | |
发表时间:2009-08-03
saberma 写道 我记得<<Agile Web Development with Rails>>就有讲到的
楼主没看过? 呵呵,我读书太少,汗颜。 |
|
返回顶楼 | |