Счетчик приращений Ruby on Rails в модели - PullRequest
5 голосов
/ 16 февраля 2011

Я пытаюсь увеличить счетчик в моей таблице пользователей от другой модели.

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

Таким образом, при создании счетчика целью будет увеличение счетчика столбца для этого пользователя. В настоящее время он отказывается получить пользователя после создания, и я получаю нулевую ошибку.

Я использую устройство для своих пользователей

Это правильное место (наилучшая практика), чтобы сделать это? У меня это работало в контроллерах, но я хотел его почистить.

Я очень неопытен с обратными вызовами модели.

Ответы [ 3 ]

11 голосов
/ 16 февраля 2011

Если User имеет много Counts, а Count принадлежит User (как кажется), то вы можете использовать кеш счетчика .Он делает именно то, что вы хотите, и встроен в ActiveRecord.

0 голосов
/ 18 июня 2012

Если вам нужны более расширяемые кэши счетчиков, посмотрите counter_culture .Он поддерживает базовые функции кэширования счетчиков, но также позволяет создавать счетчики записей, отвечающие различным условиям.Например, вы можете легко создать счетчик неактивных пользователей с помощью следующего кода:

class Product < ActiveRecord::Base
  belongs_to :category
  counter_culture :category, :column_name => \
    Proc.new {|model| model.inactive? ? 'inactive_count' : nil }
end
0 голосов
/ 16 февраля 2011

Я думаю, что лучшим местом для этого было бы использование наблюдателя , который прослушивает on_create для пользовательских объектов и затем запускает эту логику.

Что-то вроде:

class UserObserver < ActiveRecord::Observer
  def after_create(user)
    Counter.find_by_name("user_count").increment
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...