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

时间:2013-11-14 04:16:38

标签: 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

2 个答案:

答案 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认为响应是新的/不是陈旧的。