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

Rails计数器缓存及其实现

  •  6
  • Ishu  · 技术社区  · 14 年前

    我正在尝试获取Rails计数器缓存功能,但无法完全掌握它。

    假设我们有3种型号

    A、B、C

    A属于B或C,这取决于字段键\类型和键\ ID。键\类型指示A属于B还是C,因此如果键\类型=“B”,则记录属于B,否则记录属于C。

    在我的A.RB模型中,我定义了以下关联:

    belongs_to :b, :counter_cache => true, :foreign_key => "key_id"
    belongs_to :c, :counter_cache => true, :foreign_key => "key_id"
    

    在B和C模型文件中

    has_many :as , :conditions => {:key_type => "B"}
    has_many :as , :conditions => {:key_type => "C"}
    

    B和C模型都有一列作为\计数

    问题是,每次创建A的对象时,模型B和C中的计数都会增加。

    感谢您的帮助。最初我认为这可能有效:

    belongs_to :b, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "B"}
    belongs_to :c, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "C"}
    

    但这没有帮助。

    谢谢

    2 回复  |  直到 13 年前
        1
  •  15
  •   kouak    14 年前

    看起来多态关联是解决问题的方法。

    假设您有一个评论模型和两个可以评论的模型:post和profile。

    在Post和Profile模型中:

    has_many :comments, :as => :resource
    

    在注释模型中:

    belongs_to :resource, :polymorphic => true, :counter_cache => true
    

    别忘了在简介和帖子模型以及Voil_中添加“评论数”栏!

    推荐文章