代码之家  ›  专栏  ›  技术社区  ›  srboisvert

Rails:如何通过自引用多对多via实现计数器缓存

  •  4
  • srboisvert  · 技术社区  · 16 年前

    如何为使用的自引用多对多关系滚动自己的计数器缓存 has_many :through ?

    我需要跟踪每篇文章的引用和参考文献数量

    我大致使用了答案中的代码 question :

    class Publication < ActiveRecord::Base
      has_many :citations
      has_many :cited_publications, :through => :citations, :source => :reference
      has_many :references, :foreign_key => "reference_id", :class_name => "Citation"
      has_many :refered_publications, :through => :references, :source => :publication
    end
    
    class Citation < ActiveRecord::Base
      belongs_to :publication
      belongs_to :reference, :class_name => "Publication"
    end
    
    2 回复  |  直到 8 年前
        1
  •  4
  •   John Topley    16 年前

    Rails计数器缓存机制使用 increment_counter decrement_counter 方法内部。您应该能够从 standard ActiveRecord callbacks .

    class Citation < ActiveRecord::Base
      belongs_to :publication
      belongs_to :reference, :class_name => "Publication"
    
      after_create  :increment_counter_cache
      after_destroy :decrement_counter_cache
    
      private
      def decrement_counter_cache
        Publication.decrement_counter("citations_counter", publication_id)
      end
    
      def increment_counter_cache
        Publication.increment_counter("citations_counter", publication_id)
      end
    

    终止

        2
  •  3
  •   tony    14 年前

    对于has_many:通过AssociationAutomatic,直接删除连接模型,不会触发销毁回调。所以减量计数器在这种情况下不起作用