8

是否可以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
4

2 回答 2

4

对于 Rails < 5:

stale?(last_modified: @items.maximum(:updated_at))

对于 Rails >= 5,只需:

stale?(@items)
于 2016-10-28T19:31:18.190 回答
2

你可以那样做

stale?(@items, last_modified: @items.order('updated_at ASC').last)

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

{ etag: record, last_modified: record.try(:updated_at) }.merge!(additional_options)

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

编辑:

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

于 2013-12-29T14:58:23.787 回答