Загрузка БД на мой сайт становится очень высокой, поэтому мне пора кэшировать общие запросы, которые называются 1000 раз в час, когда результаты не меняются. Так, например, в моей модели города я делаю следующее:
def self.fetch(id)
Rails.cache.fetch("city_#{id}") { City.find(id) }
end
def after_save
Rails.cache.delete("city_#{self.id}")
end
def after_destroy
Rails.cache.delete("city_#{self.id}")
end
Итак, теперь, когда я могу использовать City.find(1), я впервые попал в БД, но в следующие 1000 раз получаю результат из памяти. Отлично. Но большинство вызовов в город - это не City.find(1), а @user.city.name, где Rails не использует выборку, но снова запрашивает DB... что имеет смысл, но не совсем то, что я хочу.
Я могу сделать City.find(@user.city_id), но это уродливо.
Итак, мой вопрос к вам, ребята. Что делают умные люди? Что правильный способ сделать это?