добавление кеша в memonized объект - PullRequest
0 голосов
/ 26 декабря 2018

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

def user_details    
 @_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
end

добавление кеша

def user_details    
  data = Rails.cache.fetch("#{user.updated_at.to_i}") do
  @_user_details ||= user.profiles.includes(":asso_1,:asso_2,:asso_3")
  end
  @_user_details = data
end

1 Ответ

0 голосов
/ 27 декабря 2018

Изменить свой ключ кеширования;сделайте что-то вроде: users_#{user.id};

Тогда вам нужно будет удалить этот ключ при обновлении пользователя.

Кроме того, ваш метод user_details должен выглядеть примерно так:

def user_details    
  @_user_details ||= Rails.cache.fetch("users_#{user.id}") do
    user.profiles.includes(":asso_1,:asso_2,:asso_3")
  end

  return @_user_details
end

(я не уверен, почему вы хотите это в @_user_details, но я сохранил это как ваш пример)

Ваша пользовательская модель должна выглядеть примерно так:

class User < ApplicationRecord
  ...

  after_update { Rails.cache.delete(cache_key) }

  def cache_key
    "users_#{self.id}"
  end

  def details
    Rails.cache.fetch(cache_key) do
      self.profiles.includes(":asso_1,:asso_2,:asso_3")
    end
  end
end
...