Rails 3 render_component не может обработать 304? / Force ActionDispatch :: Запрос на обход кеша - PullRequest
3 голосов
/ 01 сентября 2011

Я использую render_component, https://github.com/vhochstein/render_component в Rails 3.

Когда мой контроллер возвращает результат 304, render_component завершается ошибкой:

undefined method `redirect_url' for []:Array

в этой строке:

response = component_response(options, true)[2]

** if response.redirect_url **
  redirect_to response.redirect_url
else
  render :text => response.body, :status => response.status
end

Причина в том, что controller.dispatch(action, request) (результат component_response) возвращает массив с:

[304, {"ETag"=>"....", "Cache-Control"=>"max-age=0, private, must-revalidate"}, []]

вместо результата 200, который выглядит следующим образом:

[200, {"Content-Type"=>"text/html; charset=utf-8", "ETag"=>"\"...\"", "Cache-Control"=>"max-age=0, private, must-revalidate }, #<ActionDispatch::Response:0x007f8eee1918b8 @writer=...

Пытался добавить request_env["Cache-Control"] = "no-store, no-cache, must-revalidate" в качестве заголовка к ActionDispatch::Request, но не повезло.Я проверил, что заголовок получен контроллером.

...