Когда я выполняю следующий вызов в действии моего контроллера, я вижу, что в первый раз, когда я загружаю страницу, я вижу вывод "posts удара по дб" в выводе консоли.
cache_key = "posts"
@posts = Rails.cache.fetch(cache_key, expires_in: 5.minutes) do
puts "posts hitting the db"
Post.include(:tags).where("post_status = 1").order("id desc")
end
Если я перезагружаюсьна странице, я не вижу сообщения "posts удара по БД", но я все еще вижу запросы вроде:
Обработка PostsController # index как HTML-рендеринга posts / index.html.erb внутриlayouts / main Загрузить пост (0.5ms) ВЫБЕРИТЕ "posts". * FROM "posts" ГДЕ (post_status = 1) ЗАКАЗАТЬ ПО id desc ↳ app / views / posts / index.html.erb: 6 Загрузка метки (0.3ms) SELECT"tags". * FROM "теги" WHERE "теги". "id" = $ 1 [["id", 7]] ↳ app / views / posts / index.html.erb: 6 Отображение posts / index.html.erbв макетах / сообщениях (31,4 мс) Выполнено 200 OK за 87 мс (Просмотров: 62,6 мс | ActiveRecord: 8,2 мс)
Это потому, что он кэширует @posts, но поскольку объект @posts не был 'Т на самом деле использовал это даже не сделать вызов БД?Поэтому, когда страница просмотра выполняет @ posts.each, тогда она попадает в базу данных?
Например, если я удаляю все мои html на странице просмотра, она вообще не попадает в базу данных.