Я использую решение, основанное на базе данных для меток и переводов, которые я хотел бы кэшировать на уровне сериализатора. Вот мой сериализатор.Как использовать динамическое значение ключа кэша с помощью ActiveModel :: Сериализаторы (v0.10.0.rc1)
class AppLabelSerializer < ActiveModel::Serializer
cache key: 'app_label', expires_in: 3.hours
attributes :id, :key, :label, :label_plural
def key
object.app_label_dictionary.key
end
end
Проблема заключается в том, что мне нужно кэшировать этикетки для каждого языка, так что мне нужно указать язык где-то в ключе. Я попытался это решение:
cache key: "#{scope.app_language.name}/app_label", expires_in: 3.hours
Но ценность scope
не доступна там по какой-то причине.
Почему у вас есть как метод экземпляра для ключа и прок? Оба подхода поддерживаются monkeyhack, или вам нужно использовать оба метода? –
Вам не нужны оба. Метод 'key', который я определял, был всего лишь ключевым полем AppLabel, и мне нужно было его переопределить. Я удалил его из примера, потому что он был ненужным и запутанным. Отвечает ли это на ваш вопрос? –