0

필자가 보았던 모든 레일즈 etag 예제는 컨트롤러의 마지막 라인으로 호출되는 fresh_when 메소드로 매우 간단합니다. 페이지가 여전히 신선한 경우 요청을 호출하고 싶지 않은 리소스 집약적 인 메서드 호출을 가진 컨트롤러에 대해 fresh_when 메서드가 어떻게 작동하는지 이해하려고합니다. 노트이 사용자가 마지막으로 업데이트 이후 업데이트되지 않은 경우, 예를 들어,Etags in controller

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 아래에 놓으면 호출 될까요? 감사!

+0

봇은 왜 액션 캐싱을 사용합니까? – cpuguy83

+0

레일 4가 액션 캐싱을 제거했습니다. 새로운 관례는 etags와 조각 캐싱 인 것 같습니다. 나는 그들이 완전히 어떻게 작동하는지 이해하려고 노력하고있어 etags에 새로운 사람입니다. – John

+0

나는 오래된 것을 선호합니다. –

답변

1

낡은 것을 사용하고 싶습니다. 내가 그때 신선한 ~을 이해하는 것이 더 쉽습니다. 다음은 그 예입니다.

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