首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails避免在基本显示操作上使用片段缓存进行查询

Rails避免在基本显示操作上使用片段缓存进行查询
EN

Stack Overflow用户
提问于 2014-08-27 14:08:34
回答 1查看 455关注 0票数 3

我在玩片段缓存,我已经阅读了指南并观看了栏杆。

我试图在一个基本的显示动作上做一些片段缓存:

控制器:

代码语言:javascript
复制
class PostsController < ApplicationController
  before_action :set_post, only: [:show]

  def show
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_post
      @post = Post.friendly.find(params[:id])
      # @post = Post.find(params[:id])
    end
end

视图:

代码语言:javascript
复制
<% cache @post do %>

  <h1><%= @post.title %></h1>
  <%= @post.content %>

<% end %>

问题:虽然构建和读取了片段(请参阅下面的日志),但数据库仍然被击中。这是正常的行为吗?

我怀疑“前操作”筛选器会在读取缓存之前触发查询。

我怀疑友好的id系统,但查询也发生在经典的查找中。

我应该如何缓存这个以避免查询?

日志:

代码语言:javascript
复制
Started GET "/articles/article-3" for 127.0.0.1 at 2014-08-27 10:05:14 -0400
Processing by PostsController#show as HTML
Parameters: {"id"=>"article-3"}
Post Load (1.2ms)  SELECT  "posts".* FROM "posts"  WHERE "posts"."slug" = 'article-3'  ORDER BY "posts"."id" ASC LIMIT 1
Cache digest for app/views/posts/show.html.erb: 18a5c19e6efef2fd1ac4711102048e1c
Read fragment views/posts/3-20140730194235000000000/18a5c19e6efef2fd1ac4711102048e1c (0.5ms)
Rendered posts/show.html.erb within layouts/application (4.8ms)
EN

回答 1

Stack Overflow用户

发布于 2014-08-27 14:29:07

除非您的应用程序只有一个帖子,否则我真的不认为您希望缓存第一个调用片段缓存给定的帖子,但它仍然需要知道要访问哪个帖子。

如果您确实缓存了它,那么每次加载post#show页面时,不管您请求什么帖子,您都会看到一个帖子--缓存的帖子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25529378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档