Пытаясь реализовать поддержку условного получения в системе отдыха, мы натолкнулись на fresh_when и stale? методы.
Следующий код отлично работает с 304 и без дальнейшей визуализации:
если устарел? (: etag => resource,: last_modified => resource.updated_at.utc)
ответить | сделать | форматировать |
format.html # show.html.erb
}
конец
конец
Но при доступе к 1.xml будет пытаться визуализировать ресурс дважды:
if stale?(:etag => resource, :last_modified => resource.updated_at.utc)
respond_to do |format|
format.html # show.html.erb
format.xml {
render :xml => @order.to_xml(:controller => self, :except => [:paid_at])
}
end
end
Сообщение об ошибке:
ActionController :: DoubleRenderError в OrdersController # show
Может отображать или перенаправлять только один раз за действие
RAILS_ROOT: / Users / guilherme / Documents / ruby / restfulie-test
Трассировка приложений | Framework Trace | Полная трассировка
/ Библиотека / Ruby / Gems / 1.8 / gems / actionpack-2.3.4 / lib / action_controller / base.rb: 900: в render_without_benchmark'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/benchmarking.rb:51:in
render '
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in ms'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:10:in
realtime '
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in ms'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/benchmarking.rb:51:in
render '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:1331:in send'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:1331:in
execute_action_without_filters '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/filters.rb:617:in call_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/filters.rb:610:in
execute_action_without_benchmark '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/benchmarking.rb:68:in perform_action_without_rescue'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in
ms '
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:10:in realtime'
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/core_ext/benchmark.rb:17:in
мс '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/benchmarking.rb:68:in perform_action_without_rescue'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/rescue.rb:160:in
execute_action_without_flash '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/flash.rb:146:in perform_action'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:532:in
send '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:532:in process_without_filters'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/filters.rb:606:in
process '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:391:in process'
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/base.rb:386:in
call '
/Library/Ruby/Gems/1.8/gems/actionpack-2.3.4/lib/action_controller/routing/route_set.rb:437:in `call '
Есть предложения?
Привет