Ожидающий запрос, вероятно, использует кэш ActiveRecord.Rails кэширует запросы на время запроса, поэтому, если вы выполняете один и тот же запрос несколько раз в одном запросе, он попадет в базу данных только в первый раз.
Вы можете смоделировать это в консоли:
Entity.cache { Entity.first; Entity.first }
В журналах вы увидите что-то вроде этого (обратите внимание, что второй запрос говорит CACHE
):
[2018-12-06T10:51:02.436 DEBUG (1476) #] Entity Load (4.9ms) SELECT "entities".* FROM "entities" LIMIT 1
[2018-12-06T10:51:02.450 DEBUG (1476) #] CACHE (0.0ms) SELECT "entities".* FROM "entities" LIMIT 1
Чтобы обойти кеш, вы можете использовать:
Entity.uncached { Entity.where(key: @key)&.last }
Использование uncached
отключит кэш внутри блока, даже если охватывающая область работает внутри блока cached
.