0

Каждый пример rails 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

Rails 4 удален действие кеширование. Похоже, новое соглашение - это etags и кэширование фрагментов. Я новичок в etags, поэтому я пытаюсь понять, как они полностью работают. – John

+0

Я предпочитаю использовать устаревшие. –

ответ

1

Мне нравится использовать устаревшие? мне легче понять тогда fresh_when. Вот пример.

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