Ruby on rails 模型中的RubyonRails增量计数器
我正试图从另一个模型中增加用户表中的计数器Ruby on rails 模型中的RubyonRails增量计数器,ruby-on-rails,model,callback,Ruby On Rails,Model,Callback,我正试图从另一个模型中增加用户表中的计数器 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 类计数
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时,目标是为该用户增加一个计数器列。目前,它拒绝在创建后获取用户,我得到一个零错误
我正在为我的用户使用Desive
这是正确的(最佳实践)地方吗?我让它在控制器里工作,但我想把它清理干净
我对模型回调非常缺乏经验。我认为更好的方法是使用侦听用户对象的on_create,然后运行此逻辑 比如:
class UserObserver < ActiveRecord::Observer
def after_create(user)
Counter.find_by_name("user_count").increment
end
end
class UserObserver
如果用户
有许多计数
并且计数
属于用户
(看起来是这样),那么您可能需要使用一个。它完全执行您想要执行的操作,并且内置于ActiveRecord中。如果您想要更多可扩展的计数器缓存,请查看。它支持基本的计数器缓存功能,但也允许您创建满足各种条件的记录计数器。例如,您可以使用以下代码轻松创建非活动用户计数:
class Product < ActiveRecord::Base
belongs_to :category
counter_culture :category, :column_name => \
Proc.new {|model| model.inactive? ? 'inactive_count' : nil }
end
类产品\
Proc.new{| model | model.inactive???'inactive_count':nil}
结束
能否添加用于创建计数对象的代码?你可能想要包括你的目标或商业案例,或者准备好回答很多试图重构你正在做的事情。我理解,我想概括模型,使情况变得简单。用户有很多计数,其中每个用户条目都有一列记录创建时的计数(User.count)。我要试一试!工作得很好。Rails使它变得太简单:)有趣的解决方案,我将用计数器缓存和观察者进行实验。