У меня есть представление с использованием фрагментного кэширования для отношения ActiveRecord
, например,
<% cache MyModel.all do %>
...
<% end %>
Я вижу два запроса к БД, сгенерированных в этом случае
SELECT COUNT(*) AS "size", MAX("my_model"."updated_at") AS timestamp FROM "my_model"
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
.