1

我这里有一些代码

class group < ActiveRecord::Base 
    has_many :memberships, :dependent => :destroy         
    has_many :members, :through => :memberships,  :source => :person
                       :conditions => ['memberships.pending = ? ', false]

     ......

现在,我想为成员添加一个 counter_cache。由于条件模式,我不能在成员而不是成员上添加 counter_cache。但是类人不属于_组,它有_许多成员和成员属于_组。我应该在哪里添加 :counter_cache 架构?

或者我该如何实现要求:为会员添加一个 counter_cache

谢谢

4

2 回答 2

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

于 2012-08-09T00:27:17.523 回答
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

您还应该在成员资格被破坏时创建计数器缓存。但我想我已经输入了足够的内容让你实现它。

于 2011-08-23T14:09:58.487 回答