Consultas de banco de dados em cache do Rails e práticas recomendadas

A carga do banco de dados no meu site está ficando muito alta; portanto, é hora de eu armazenar em cache consultas comuns que são chamadas milhares de vezes por hora em que os resultados não estão mudando. Por exemplo, no meu modelo de cidade, faço o seguinte:

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

Então agora quando eu posso City.find (1) na primeira vez em que bati no banco de dados, mas nas próximas 1000 vezes recebo o resultado da memória. Ótimo. Mas a maioria das chamadas para city não é City.find (1), mas @ user.city.name, em que o Rails não usa a busca, mas consulta o banco de dados novamente ... o que faz sentido, mas não exatamente o que eu quero que ele faça.

Eu posso fazer City.find (@ user.city_id), mas isso é feio.

Então, minha pergunta para vocês. O que as pessoas inteligentes estão fazendo? Qual é a maneira certa de fazer isso?

questionAnswers(4)

yourAnswerToTheQuestion