好比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,爽!
完。
分享到:
相关推荐
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视频中...
gem 'custom_counter_cache' 示例 带计数器缓存的类 这是将用于计算计数器缓存的值的块。 其他模型将通过after_save或after_destroy回调通过它们的关联来调用它。 include CustomCounterCache :: Model define_...
《Line_Counter_2008:代码行统计利器在.NET平台的应用》 在软件开发过程中,代码行数(LOC,Lines of Code)是衡量项目规模、复杂度和工作量的重要指标之一。Line_Counter_2008,正如其名,是一款专为开发者设计的...
本压缩包"counter_99.rar"包含了一个名为"counter_guide99.con"的VHDL源码文件,用于实现一个在Xilinx Spartan3 FPGA上的计数器设计。下面我们将详细探讨这个计数器的设计、功能以及与Xilinx FPGA的集成。 首先,...
标题中的“8_COUNTER_lpc2138counter_源码”指的是一个针对LPC2138微控制器的计数器应用示例的源代码。LPC2138是NXP公司生产的一款基于ARM7TDMI-S内核的微控制器,具有高性能、低功耗的特点,广泛应用于嵌入式系统...
在这个名为“counter_4_bit.rar”的压缩包中,包含了一个4位计数器的设计实例,对于学习和理解VHDL编程以及数字逻辑电路设计具有很高的参考价值。4位计数器是一个能够顺序计数从0到15的数字系统,它在许多数字系统和...
在`tb_counter.zip_counter_tb`中,我们可能会看到一个特定类型的计数器,如二进制计数器、模N计数器或者灰度计数器等,具体取决于设计的需求。 测试平台通常会包含以下几个关键元素: 1. **信号声明**:定义与被...
标题"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"这个标题明确指出了我们要探讨的是一个使用VHDL实现的同步二进制计数器。同步计数器的特点是其所有触发器在同一时钟边沿同步改变状态,这...
标题中的“Counter---PIC.rar_counter_pic counter_pic16f887”暗示了这是一个关于使用PIC16F887微控制器实现计数功能的项目。PIC16F887是Microchip Technology公司生产的8位微控制器,常用于嵌入式系统设计,因其低...
3. **触发器**:存储计数值并在时钟脉冲到来时更新。在模6计数器中,可能使用D型触发器或者JK触发器等。 4. **复位和预置信号**:用于初始化计数器的值。 如果我们要深入理解“MOD6COUNT_counter_modulo_”的工作...
标题"Counter_FPGAVHDL_"暗示了我们将在FPGA上实现一个基于VHDL的计数器。计数器是数字系统中最基本的组件,用于跟踪时间、频率或者作为序列发生器。在FPGA中,计数器通常由一系列触发器(如D触发器)组成,它们的...
当计数使能信号有效时,计数器可以按照预设的方向进行计数。 在Altera FPGA中实现这样的计数器,我们需要利用VHDL(Very High Speed Integrated Circuit Hardware Description Language)进行逻辑描述。VHDL是一种...
这段代码中,`always @(posedge clk or posedge reset)`块定义了时钟沿触发的计数逻辑,而`always @(*)`块则负责在任何变量变化时修正输出以保持BCD编码的有效性。当计数器超过9999或低于0000时,通过这种逻辑进行...
在这个“counter_99”项目中,我们看到的是一个用Verilog99语法编写的计数器模块。Verilog99虽然并不是一个单独的版本,但可能指的是Verilog HDL的1999年标准(IEEE 1364-1995),它引入了许多改进,使得代码更易读...
在这个上下文中的"8bit_upDown_counter.rar"是一个包含8位增减计数器设计的压缩文件,它被描述为简单、实用且优化过的实现。这个计数器能够进行向上(UP)和向下(DOWN)两种方向的计数,从0到255(8位二进制的最大...
计数器的设计通常基于触发器,例如D触发器或者JK触发器,这些触发器会在每个时钟边沿到来时更新它们的状态,从而实现计数。 在这个设计中,"counter_16.v.bak"可能是一个Verilog代码的备份文件,Verilog是一种硬件...
在压缩包的文件名"class5_counter_ip"中,"class"可能指的是教学课程的某个阶段或类别,而"counter_ip"再次强调了我们关注的是计数器的IP核。这个文件可能包含了一个完整的计数器实现,包括必要的输入(如时钟、复位...
由于没有实际的文件内容,无法给出具体的细节,但可以肯定的是,这份文档将是理解并有效利用"counter_module_"的关键资源。 总结来说,“counter_module_”是一个针对步进电机的控制模块,它的设计和实现涉及到硬件...