所以......我有3个模特。
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
Bar
加在一起,而不是.size
}。我是否必须使用before_save
或其他内容进行手动操作? Rails中是否已存在具有此功能的内容?
所以,如果有2个柱子...... 1个有bazs_count = 4
,另一个有bazs_count = 8
。如果这两个条都属于foo,那么每当bars_count = 12
更改时我都希望bazs_count
。
理由是......我经常会检查特定foo有多少个bazs,我想让查询保持最小化。
答案 0 :(得分:1)
您可以将以下方法添加到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
end