Rails检查"If-Modified-Since"的请求标头

cho*_*bin 1 api caching ruby-on-rails

我正在尝试使用Rails构建一个API,它将检查request标头"If-Modified-Since"并仅渲染在该日期之后修改的对象.问题是我试图从控制器中的请求头获取值.

# API
def index
   @products = Product.where{updated_at > request.headers["If-Modified-Since"]}
   render "v1/products/index"
end
Run Code Online (Sandbox Code Playgroud)

从请求标头中提取值的正确方法是什么?

wil*_*ynn 5

第一:If-Modified-Since用于HTTP缓存验证.请不要这样使用它.请改用参数.

回答你的问题:request.headers[]是访问请求标头的正确方法.作为参考,request是一个ActionDispatch :: Request对象.

这里的问题是你如何表达约束.你传递一个块进入ActiveRecord#where方法,该块不作任何意义(Symbol#>(String)?).您可以将其表示为SQL片段,如:

Product.where("updated_at > ?", params[:last_update])
Run Code Online (Sandbox Code Playgroud)

或者,您可以放入Squeel,并写道:

Product.where{ updated_at > params[:last_update] }
Run Code Online (Sandbox Code Playgroud)

  • 我没有看到这一点.我认为标题应该适用于那个目的.你能否提出更多论据,为什么这只应用于缓存? (2认同)