Допустим, я ищу определенный элемент в ассоциации has_many.
Есть ли способ найти, который не перепишет базу данных, если то, что я запрашиваю, уже кэшировано?
Вот моя ситуация (которая не работает и не выполняет то, что я просил):
class User
has_many :friendships
def some_function(buddy)
f = friendships.detect{|friendship| friendship.user == self &&
friendship.friend == buddy}
f.do_something
end
end
Функция подвержена проблемам N + 1, но большую часть времени я уже использовал: включаю или предварительно загружаю дружбу пользователя в другом месте. Однако, если я этого не сделал, то эта текущая функция вернется к запросу всех друзей, даже если она нужна. Казалось бы, решение выглядит примерно так:
f = Friendship.find_by_user_id_and_friend_id id, buddy.id
Однако, это снова попадет в базу данных, даже если все дружеские отношения кэшируются, и у меня есть то, что мне нужно прямо здесь.
Есть ли способ использовать кэшированную копию или, если ее нет, искать определенную запись?