是否可以将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
答案 0 :(得分:4)
对于Rails< 5:
stale?(last_modified: @items.maximum(:updated_at))
对于Rails> = 5只是:
stale?(@items)
答案 1 :(得分: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)
其中record是第一个arg,@items
在你的情况下,所以通过传递last_modified
值,你可以覆盖它。我不确定etag
标题本身是什么,但无论如何这都值得一试。
编辑:
所以我检查了一下,如果Etag不同或上次修改大于请求,Rails认为响应是新的/不是陈旧的。