Ключ кеша Rails 5.2 для отношений, генерирующих два запроса - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть представление с использованием фрагментного кэширования для отношения ActiveRecord, например,

<% cache MyModel.all do %>
...
<% end %>

Я вижу два запроса к БД, сгенерированных в этом случае

  1. SELECT COUNT(*) AS "size", MAX("my_model"."updated_at") AS timestamp FROM "my_model"
  2. SELECT "my_model".* from "my_model"

Я ожидаю первого, и обычно это гораздо более эффективный запрос. Я не ожидал второго.

Если я вместо этого использую:

<% cache ActiveSupport::Cache.expand_cache_key(MyModel.all) do %>
...
<% end %>

тогда я получаю только первый запрос с тем же результирующим ключом кэша.

Это ошибка или я что-то не так делаю?

РЕДАКТИРОВАТЬ : сужено, где это происходит: см. https://github.com/rails/rails/pull/29092#issuecomment-437572543

, когда normalize_version выполняется, отношение не отвечает на cache_version, и поэтому заканчивается расширением с to_a. По сути, вызывая Product.all.to_a, а затем для каждого объекта вызов cache_version, который возвращает nil.

1 Ответ

0 голосов
/ 01 декабря 2018

Да, это похоже на ошибку. Надеюсь, это будет исправлено на этом PR , так как мой собственный PR для фиксированного временного промежутка был отклонен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...