首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >counter_caches之和

counter_caches之和
EN

Stack Overflow用户
提问于 2013-12-20 22:18:00
回答 1查看 36关注 0票数 2

所以..。我有三个模特。

代码语言:javascript
复制
class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
  has_many :bazs
end

class Baz < ActiveRecord::Base
  belongs_to :bar, counter_cache: true
end

因此,我希望为Foo创建一个类似于bars_count的列,但我希望将bazs_count of Bar (而不是.size )添加到一起。我在这里需要手动操作吗?用before_save还是别的什么?Rails中是否已经有这种功能?

所以如果有两个酒吧..。1有一个bazs_count = 4,另一个有bazs_count = 8。如果这两个条都属于foo,那么每当bars_count = 12更改时,我都希望有bazs_count

理由是..。我经常会检查一个特定的foo有多少个bazs,并且我希望将查询保持在最低限度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-20 23:59:12

您可以将以下方法添加到Baz模型中,以增加和减少Foo模型中的bazs_count列。我发现Rails把baz变成了bazs,而不是bazes。

代码语言:javascript
复制
class Foo < ActiveRecord::Base
  has_many :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo, counter_cache: true
  has_many :bazs
end

class Baz < ActiveRecord::Base
  belongs_to :bar, counter_cache: true

  after_create :increment_foo_counter
  after_destroy :decrement_foo_counter

  private

  def increment_foo_counter
    Foo.increment_counter(:bazs_count, bar.foo_id)
  end

  def decrement_foo_counter
    Foo.decrement_counter(:bazs_count, bar.foo_id)
  end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20712803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档