我正在尝试从另一个模型中增加User表中的计数器。
class Count < ActiveRecord::Base
belongs_to :user
after_create :update_count
def update_count
user = User.find(self.user_id)
user.increment(:count)
end
end
因此,当创建count时,目标是为该用户增加一个计数器列。目前它拒绝在创建后获得用户,我得到一个零错误。
我正在为我的用户使用设计
这是最合适的(最佳做法)吗?我让它在控制器中工作,但想要清理它。
我对模型回调非常缺乏经验。
答案 0 :(得分:11)
如果User
有许多Counts
且Count
属于User
(似乎是),那么您可能需要使用counter cache。它完全符合您的要求,并且内置于ActiveRecord中。
答案 1 :(得分:0)
我认为更好的地方是使用监听User对象的on_create的observer,然后运行此逻辑。
类似的东西:
class UserObserver < ActiveRecord::Observer
def after_create(user)
Counter.find_by_name("user_count").increment
end
end
答案 2 :(得分:0)
如果您想要更多可扩展的计数器缓存,请查看counter_culture。它支持基本的计数器缓存功能,但也允许您创建满足各种条件的记录计数器。例如,您可以使用以下代码轻松创建非活动用户计数:
class Product < ActiveRecord::Base
belongs_to :category
counter_culture :category, :column_name => \
Proc.new {|model| model.inactive? ? 'inactive_count' : nil }
end