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)

2 番目のパラメーター (内部で呼び出されるハッシュ) がメソッドに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 に答える