保证counter_cache在更新时也有效

本文介绍如何在Rails应用中实现博客分类计数的自动维护,利用counter_cache特性,在创建、删除及更改博客分类时自动调整blogs_count字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好比je的博客分类与博客,分类后面标注了当前分类下的文章数量,这个在ror中很容易就联想到通过counter_cache来实现,完美的让人瞠目结舌。

在父表加个字段blogs_count,子表model中的belongs_to中加上【:counter_cache => true】声明即可了,剩下的rails统统帮你自动搞定。

使用之后,发现在创建博客、删除博客时,分类中的blogs_count字段可以自动实现+1、-1。然后,不幸的是在变更博客的分类时,blogs_count字段没法实现自动±1,这是怎么回事呢,马上google一通,发现BelongsToAssociation类曾在05年被人弄过,没弄之前确实不支持更新时自动维护count字段,对照弄过后的BelongsToAssociation类与现在rails 2.3.2中的BelongsToAssociation类,发现差不多啊,看来现在rails肯定支持更新父分类时自动实现count的±1。

 

05年的贴子:

http://dev.rubyonrails.org/ticket/3245

http://dev.rubyonrails.org/attachment/ticket/3245/belongs_to_counter_fix.diff

 

试着变换了写法,测试,OK了。

原写法:

if @blog.update_attributes(params[:blog])

 

新写法:

    @blog = Blog.find(params[:id])

    @blog.title = params[:blog][:title]
    @blog.body = params[:blog][:body]

    unless params[:blog][:blog_category_id].blank?
      @blog.blog_category = BlogCategory.find(params[:blog][:blog_category_id])
    end

    @blog.save
 

 

这样就可以实现博客分类中的blogs_count字段完全自动维护了。

当博客变更分类时,变更后的分类与变更前的分类的博客数量可以实现自动±1,爽!

 

完。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值