Как я могу кэшировать вычисляемый атрибут в Rails 3, похожий на counter_cache? - PullRequest
1 голос
/ 15 декабря 2011

У меня есть атрибут, который представляет собой рассчитанное значение на основе данных из других моделей.

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

Мне нужно вызвать эту функцию, если какие-либо из зависимых данных изменены.Какие-либо предложения?

1 Ответ

2 голосов
/ 16 декабря 2011

Редактировать, основываясь на комментарии:

Хорошо, теперь у вас есть модель Like и модель User.Поместите функцию для обновления популярности в методе в User, затем обратный вызов after_create или after_save (если он может измениться после создания) на Like, чтобы вызвать ее для пользователя, который ее получил:

class User < ActiveRecord::Base
  has_many :likes

  def calculate_popularity
    update_attribute(:popularity, existing_function(foo))
  end
end

class Like < ActiveRecord::Base
  belongs_to :user

  after_create :update_user_popularity

  def update_user_popularity
    user.calculate_popularity
  end
end

Очевидно, еслиLikes - это различные виды пользовательской активности, а не сам пользователь. Вам нужно будет изучить свои ассоциации, чтобы связаться с пользователем из Like, но это не должно быть слишком сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...