引用
lib/mongoid/counter_cache.rb
# encoding: utf-8
module Mongoid #:nodoc:
# This module handles the behaviour for Counter Cache.
module CounterCache #:nodoc:
extend ActiveSupport::Concern
included do
set_callback :create, :after, :increment_counter
set_callback :destroy, :after, :decrement_counter
unless methods.include? 'counter_cache'
class_attribute :counter_cache
self.counter_cache = true
end
end
# used by increment_counter and decrement_counter
def update_counter(count)
if count.is_a?(Integer)
associations = reflect_on_all_associations(:referenced_in)
for association in associations
parent_class = association.class_name.constantize
counter_name = "#{association.inverse_of}_count"
object_id = self["#{association.name}_id".to_sym]
if !object_id.nil? && parent_class.fields.keys.include?(counter_name)
parent_class.find(object_id).inc(counter_name.to_sym, count)
end
end
end
end
# Increment a number field by one, usually representing a count.
# This is only called on create.
#
# @example Increment a number field by one.
# post.increment_counter
def increment_counter
update_counter(1)
end
# Decrement a number field by one, usually representing a count.
# This is only called on destroy.
#
# @example Decrement a number field by one.
# post.decrement_counter
def decrement_counter
update_counter(-1)
end
end
end
引用
app/models/blog.rb
require 'rtranslate' # 谷歌翻譯
require 'mongoid/counter_cache'
class Blog
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::CounterCache
# 數據關聯
referenced_in :owner, # 擁有者
:class_name => 'Person', :inverse_of => :blogs
references_many :posts # 帖子
# 數據效驗
validates :title, :presence => true
validates :permalink,
:uniqueness => true,
:length => { :minimum => 4 },
:allow_blank => true,
:format => { :with => /^[a-zA-Z0-9\_\-\ ]*?$/i }
# 數據字段
field :title, :null => false
field :permalink, :null => false
field :tagline
field :owner_name
field :owner_avatar
# 計數器
field :posts_count, :type => Integer, :default => 0 # 帖子數
# 主鍵
key :permalink
# 索引
index :permalink, :unique => true
# 作用域:
default_scope desc(:updated_at) # 默認
# 回調:
before_validation :generate_permalink
# 所有者信息
def owner=(person)
self.owner_id = person.id
self.owner_name = person.display_name
self.owner_avatar = person.avatar!
end
protected
def generate_permalink # 翻譯成英文
self.permalink = Translate.t(title, 'UNKNOWN', 'English') if permalink.blank?
end
end
分享到:
相关推荐
VHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_nVHDL例程源码 counter_...
gem 'custom_counter_cache' 示例 带计数器缓存的类 这是将用于计算计数器缓存的值的块。 其他模型将通过after_save或after_destroy回调通过它们的关联来调用它。 include CustomCounterCache :: Model define_...
视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中工程代码 class5_counter_ip视频中...
本压缩包"counter_99.rar"包含了一个名为"counter_guide99.con"的VHDL源码文件,用于实现一个在Xilinx Spartan3 FPGA上的计数器设计。下面我们将详细探讨这个计数器的设计、功能以及与Xilinx FPGA的集成。 首先,...
《Line_Counter_2008:代码行统计利器在.NET平台的应用》 在软件开发过程中,代码行数(LOC,Lines of Code)是衡量项目规模、复杂度和工作量的重要指标之一。Line_Counter_2008,正如其名,是一款专为开发者设计的...
在这个名为“counter_4_bit.rar”的压缩包中,包含了一个4位计数器的设计实例,对于学习和理解VHDL编程以及数字逻辑电路设计具有很高的参考价值。4位计数器是一个能够顺序计数从0到15的数字系统,它在许多数字系统和...
标题中的“8_COUNTER_lpc2138counter_源码”指的是一个针对LPC2138微控制器的计数器应用示例的源代码。LPC2138是NXP公司生产的一款基于ARM7TDMI-S内核的微控制器,具有高性能、低功耗的特点,广泛应用于嵌入式系统...
"binarycount.rar_Synchronous Counter_VHDL 计数器_binary counter_bina"这个标题明确指出了我们要探讨的是一个使用VHDL实现的同步二进制计数器。同步计数器的特点是其所有触发器在同一时钟边沿同步改变状态,这...
标题"Up_Down_Counter v1.0.zip_UP_counter_fpga_fpga的down_counter_module"揭示了这是一个关于FPGA实现的可逆计数器,能够进行向上或向下计数的版本1.0的工程文件。描述" FPGA Up/Down couner Module"进一步确认了...
本篇文章将详细探讨`tb_counter.zip_counter_tb`这个项目,它是用VHDL(Very High-Speed Integrated Circuit Hardware Description Language)编写的测试平台,主要用于验证一个计数器的设计,并理解其工作原理。...
标题中的“Counter---PIC.rar_counter_pic counter_pic16f887”暗示了这是一个关于使用PIC16F887微控制器实现计数功能的项目。PIC16F887是Microchip Technology公司生产的8位微控制器,常用于嵌入式系统设计,因其低...
本文将深入探讨一个特定的Verilog实现:一个从99到1进行倒计数并自动回零的计数器,这个计数器被称为“counter_99”。这个设计实例不仅展示了Verilog的基本语法,还演示了如何构建一个具有特定功能的数字逻辑电路。 ...
本文将深入探讨"Counter_FPGAVHDL_"相关的知识点,以及如何利用VHDL来设计和测试一个时钟计数器。 标题"Counter_FPGAVHDL_"暗示了我们将在FPGA上实现一个基于VHDL的计数器。计数器是数字系统中最基本的组件,用于...
标题中的"Python库 | django_counter_field_py3-0.0.1.2.tar.gz"指出这是一个基于Python的软件包,具体来说是针对Django框架的一个扩展模块,名为`django_counter_field`. 这个版本号0.0.1.2表明它是该库的早期版本...
在这个上下文中的"8bit_upDown_counter.rar"是一个包含8位增减计数器设计的压缩文件,它被描述为简单、实用且优化过的实现。这个计数器能够进行向上(UP)和向下(DOWN)两种方向的计数,从0到255(8位二进制的最大...
总之,这个名为“bcd_updown_counter2”的项目提供了一个4位BCD加减计数器的Verilog实现,可以作为数字系统设计的基础组件,用于教育、学习或实际应用。通过理解这个计数器的工作原理和Verilog代码,我们可以更好地...
标题"counter_16_计数输入clk_计数器_"指的是一个具有16位计数能力的计数器,它主要依赖于时钟信号(CLK)来实现计数功能。 计数器是数字系统中的一个基本组成部分,其功能是根据特定的输入信号(在这种情况下是...
标题“MOD6COUNT_counter_modulo_”提示我们这是一个与计数器相关的程序或设计,特别是模6计数器。模6计数器是一种数字逻辑电路,它在每次时钟脉冲后将计数值增加1,并在达到6后重置回0,如此循环。这种类型的计数器...
architecture Behavioral of up_down_counter is begin process(clk, reset) begin if reset = '1' then count_out (others => '0'); -- Reset to 0 elsif rising_edge(clk) then -- On clock's positive edge ...
"counter_ip_verilog_" 这个标题表明我们正在讨论一个使用 Verilog 编写的计数器IP( Intellectual Property)核心。IP核是预设计的、可重用的硬件模块,可以方便地集成到更大的电路设计中。这个项目特别适合初学者...