我这里有一些代码
class group < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :members, :through => :memberships, :source => :person
:conditions => ['memberships.pending = ? ', false]
......
现在,我想为成员添加一个counter_cache。由于条件架构,我不能 在成员资格而不是成员上添加counter_cache。但是班级人员不属于_to 团体,它拥有很多会员资格和会员资格属于团体。我应该在哪里添加 :counter_cache架构?
或如何实现要求:为成员资格添加counter_cache
THX
答案 0 :(得分:0)
您可能应该实现自己的缓存计数器。
class Membership < ActiveRecord::Base
after_create :increment_group_pending_counter_cache
private
def increment_group_pending_counter_cache
if self.pending
# let's say the column in the groups table is called `pending_member_counter`
self.group.update_attribute :pending_member_counter, group.pending_member_counter + 1
end
end
end
您还应该在销毁成员资格时创建计数器缓存。但我认为我输入的内容足以让你实现它。
答案 1 :(得分:0)
在@Ramon Tayag的答案的基础上,当你有自己的条件时,更好的方法是使用increment_counter
方法来实现你自己的计数器缓存:
class Membership < ActiveRecord::Base
after_create :increment_group_pending_counter_cache
private
def increment_group_pending_counter_cache
if self.pending
Group.increment_counter :pending_member_counter, group_id
end
end
end
其中Group是具有名为“pending_member_counter”的列的模型类,并且您的Membership模型具有将其与Group模型相关联的group_id列。
完整文档:http://apidock.com/rails/ActiveRecord/CounterCache/increment_counter