`
netfork
  • 浏览: 488101 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

保证counter_cache在更新时也有效

    博客分类:
  • Ruby
阅读更多

好比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,爽!

 

完。

3
1
分享到:
评论
2 楼 yuan 2010-03-17  
JavaEye博客分类目前就有这个问题。
1 楼 ywencn 2009-11-24  
非常好,收藏了

相关推荐

    VHDL例程源码 counter_n

    VHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_...

    视频中工程代码 class5_counter_ip

    视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中...

    custom_counter_cache:支持条件和多种模型的自定义counter_cache功能

    gem 'custom_counter_cache' 示例 带计数器缓存的类 这是将用于计算计数器缓存的值的块。 其他模型将通过after_save或after_destroy回调通过它们的关联来调用它。 include CustomCounterCache :: Model define_...

    Line_Counter_2008

    《Line_Counter_2008:代码行统计利器在.NET平台的应用》 在软件开发过程中,代码行数(LOC,Lines of Code)是衡量项目规模、复杂度和工作量的重要指标之一。Line_Counter_2008,正如其名,是一款专为开发者设计的...

    counter_99.rar_counter_guide99.con_vhdl xilinx counter

    本压缩包"counter_99.rar"包含了一个名为"counter_guide99.con"的VHDL源码文件,用于实现一个在Xilinx Spartan3 FPGA上的计数器设计。下面我们将详细探讨这个计数器的设计、功能以及与Xilinx FPGA的集成。 首先,...

    8_COUNTER_lpc2138counter_源码

    标题中的“8_COUNTER_lpc2138counter_源码”指的是一个针对LPC2138微控制器的计数器应用示例的源代码。LPC2138是NXP公司生产的一款基于ARM7TDMI-S内核的微控制器,具有高性能、低功耗的特点,广泛应用于嵌入式系统...

    counter_4_bit.rar_4-bit counter vhdl_4bit 计数器 mc_counter_vhdl_vh

    在这个名为“counter_4_bit.rar”的压缩包中,包含了一个4位计数器的设计实例,对于学习和理解VHDL编程以及数字逻辑电路设计具有很高的参考价值。4位计数器是一个能够顺序计数从0到15的数字系统,它在许多数字系统和...

    tb_counter.zip_counter_tb

    在`tb_counter.zip_counter_tb`中,我们可能会看到一个特定类型的计数器,如二进制计数器、模N计数器或者灰度计数器等,具体取决于设计的需求。 测试平台通常会包含以下几个关键元素: 1. **信号声明**:定义与被...

    Up_Down_Counter v1.0.zip_UP_counter_fpga_fpga的down_counter_modul

    标题"Up_Down_Counter v1.0.zip_UP_counter_fpga_fpga的down_counter_module"揭示了这是一个关于FPGA实现的可逆计数器,能够进行向上或向下计数的版本1.0的工程文件。描述" FPGA Up/Down couner Module"进一步确认了...

    binarycount.rar_Synchronous Counter_VHDL 计数器_binary counter_bina

    "binarycount.rar_Synchronous Counter_VHDL 计数器_binary counter_bina"这个标题明确指出了我们要探讨的是一个使用VHDL实现的同步二进制计数器。同步计数器的特点是其所有触发器在同一时钟边沿同步改变状态,这...

    Counter---PIC.rar_counter_pic counter_pic16f887

    标题中的“Counter---PIC.rar_counter_pic counter_pic16f887”暗示了这是一个关于使用PIC16F887微控制器实现计数功能的项目。PIC16F887是Microchip Technology公司生产的8位微控制器,常用于嵌入式系统设计,因其低...

    MOD6COUNT_counter_modulo_

    3. **触发器**:存储计数值并在时钟脉冲到来时更新。在模6计数器中,可能使用D型触发器或者JK触发器等。 4. **复位和预置信号**:用于初始化计数器的值。 如果我们要深入理解“MOD6COUNT_counter_modulo_”的工作...

    Counter_FPGAVHDL_

    标题"Counter_FPGAVHDL_"暗示了我们将在FPGA上实现一个基于VHDL的计数器。计数器是数字系统中最基本的组件,用于跟踪时间、频率或者作为序列发生器。在FPGA中,计数器通常由一系列触发器(如D触发器)组成,它们的...

    up_down_counter.rar_32 counter_UP_up down count_up/down counter_

    当计数使能信号有效时,计数器可以按照预设的方向进行计数。 在Altera FPGA中实现这样的计数器,我们需要利用VHDL(Very High Speed Integrated Circuit Hardware Description Language)进行逻辑描述。VHDL是一种...

    bcd_updown_counter2.zip_4 digit counter_BCD up down Counter_bcd_

    这段代码中,`always @(posedge clk or posedge reset)`块定义了时钟沿触发的计数逻辑,而`always @(*)`块则负责在任何变量变化时修正输出以保持BCD编码的有效性。当计数器超过9999或低于0000时,通过这种逻辑进行...

    counter_99.rar_0到99倒计数_0~99的倒计数_counter_verilog99计数器_倒计数

    在这个“counter_99”项目中,我们看到的是一个用Verilog99语法编写的计数器模块。Verilog99虽然并不是一个单独的版本,但可能指的是Verilog HDL的1999年标准(IEEE 1364-1995),它引入了许多改进,使得代码更易读...

    8bit_upDown_counter.rar_ UP DOWN COUNTER_8 bit counter_UP_count

    在这个上下文中的"8bit_upDown_counter.rar"是一个包含8位增减计数器设计的压缩文件,它被描述为简单、实用且优化过的实现。这个计数器能够进行向上(UP)和向下(DOWN)两种方向的计数,从0到255(8位二进制的最大...

    counter_16_计数输入clk_计数器_

    计数器的设计通常基于触发器,例如D触发器或者JK触发器,这些触发器会在每个时钟边沿到来时更新它们的状态,从而实现计数。 在这个设计中,"counter_16.v.bak"可能是一个Verilog代码的备份文件,Verilog是一种硬件...

    counter_ip_verilog_

    在压缩包的文件名"class5_counter_ip"中,"class"可能指的是教学课程的某个阶段或类别,而"counter_ip"再次强调了我们关注的是计数器的IP核。这个文件可能包含了一个完整的计数器实现,包括必要的输入(如时钟、复位...

    counter_module_

    由于没有实际的文件内容,无法给出具体的细节,但可以肯定的是,这份文档将是理解并有效利用"counter_module_"的关键资源。 总结来说,“counter_module_”是一个针对步进电机的控制模块,它的设计和实现涉及到硬件...

Global site tag (gtag.js) - Google Analytics