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使它变得太简单:)有趣的解决方案,我将用计数器缓存和观察者进行实验。