在非标准的has_many:through上使用rails counter_cache

时间:2014-08-13 12:28:23

标签: ruby-on-rails activerecord ruby-on-rails-4 counter model-associations

所以使用has_many:through关联的标准方法是使用Active Record Association Guide中的Physician-Appointment-Patient模型,对吧?它基本上是一个更详细的HABTM,两个模型有一个has_many:through和连接器模型有两个belongs_to。现在,在我目前的项目中,我有一个这样的模型结构:

class Cart < ActiveRecord::Base
  has_many :line_items, through: line_item_groups
  has_many :line_item_groups
end

class LineItemGroup < ActiveRecord::Base
  belongs_to :cart
  has_many :line_items
end

class LineItem < ActiveRecord::Base
  belongs_to :line_item_group
  has_one :cart, through: line_item_group
end

工作正常。但现在我想要一个Cart上的line_item_count,并且无法弄清楚我应该在哪里添加counter_cache属性。

感谢任何帮助: - )

1 个答案:

答案 0 :(得分:1)

首先在购物车表中添加line_item_count字段,然后在LineItem模型中添加

class LineItem < ActiveRecord::Base
  before_create  :increment_counter
  before_destroy :decrement_counter

  def increment_counter
    Cart.increment_counter(:line_item_count, cart.id)
  end

  def decrement_counter
    Cart.decrement_counter(:line_item_count, cart.id)
  end
end

我没试过,但我认为它会解决你的问题。