所以,我有一个 Folder 和一个 FolderItem 模型。
更新
# == Schema Information
#
# Table name: folders
#
# id :integer not null, primary key
# name :string(255) not null
# parent_folder_id :integer
# user_id :integer not null
# folder_itens_count :integer default(0)
# created_at :datetime
# updated_at :datetime
#
class Folder < ActiveRecord::Base
...
belongs_to :parent_folder, :class_name => 'Folder'
has_many :child_folders, :class_name => 'Folder', :foreign_key => :parent_folder_id
has_many :folder_itens, :order => 'created_at DESC'
after_update {
update_parent_folder_itens_count
}
def update_parent_folder_itens_count
parent_folder = self.parent_folder
if self.folder_itens_count_changed? && parent_folder
quant_changed = self.folder_itens_count - self.folder_itens_count_was
parent_folder.increment(:folder_itens_count, quant_changed)
end
end
end
class FolderItem < ActiveRecord::Base
...
belongs_to :folder, :counter_cache => :folder_itens_count
end
我正在使用 counter_cache 来保留单个文件夹的数量。但是一个文件夹可能是另一个文件夹的父文件夹,我希望父文件夹具有所有子文件夹的 counter_cache 总和加上它自己的 counter_cache。
为此,我尝试将 after_update 方法缓存在 counter_cache 列中所做的更改,但不知何故,在创建新的 FolderItem 时不会调用此方法。