是否可以在集合上使用陈旧方法?

Par*_*uce 8 ruby-on-rails ruby-on-rails-4

是否可以stale?与集合一起使用?例如,我正在开发一个REST api,它允许客户端偶尔查询服务器以询问最新的项目列表.如果stale?能够针对我的If-Modified ..标头检查集合并且如果没有任何变化则发送304 将是很好的.

快速举例:

def index
  @items = Item.all
  if stale?(@items)
    render json: @items
  end
end

def show
  if stale?(@item)
    render json: @item
  end
end
Run Code Online (Sandbox Code Playgroud)

Mik*_*del 2

你可以这样做

stale?(@items, last_modified: @items.order('updated_at ASC').last)
Run Code Online (Sandbox Code Playgroud)

第二个参数是内部调用的哈希值additional_options,它被传递给fresh_when方法,然后该方法执行

{ etag: record, last_modified: record.try(:updated_at) }.merge!(additional_options)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,记录是第一个参数@items,因此通过传递last_modified值您可以覆盖它。我不确定etag标头本身怎么样,但无论如何这都值得一试。

编辑:

所以我检查了它,如果 Etag 不同或上次修改的值大于请求的值,Rails 会认为响应是新鲜的/不是陈旧的。