控制器中的Etags

时间:2013-05-21 23:30:55

标签: ruby-on-rails caching ruby-on-rails-3.2 ruby-on-rails-4 etag

我见过的每个rails etag示例都非常简单,new_when方法被称为控制器中的最后一行。我试图理解fresh_when方法如何适用于具有资源密集型方法调用的控制器,如果页面仍然是新鲜的,我不想在请求中调用它。例如,

class NotesController < ApplicationController
  etag { current_user.try :id }

  def show
    @note = Note.find(params[:id])
    @note.do_some_expenisve_data_manipulation
    fresh_when(@note)
  end
end

如果自上次此用户更新后该笔记尚未更新,是否会调用@ note.do_some_expensive_data_manipulation?如果我把那条线放在fresh_when下方,它会被调用吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我觉得用陈旧?我更容易理解当时的新鲜感。这是一个例子。

if stale?(etag: @note, last_modified: @note.updated_at)
  respond_to do |format|
    format.html {
      // do expensive work here
    }
  end
end