所以..。我有三个模特。
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,并且我希望将查询保持在最低限度。
发布于 2013-12-20 23:59:12
您可以将以下方法添加到Baz模型中,以增加和减少Foo模型中的bazs_count列。我发现Rails把baz变成了bazs,而不是bazes。
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
endhttps://stackoverflow.com/questions/20712803
复制相似问题