Контроллер Rails Проверьте, запрашивает ли Turbolinks

Я разрабатываю приложение Ruby on Rails 4, использующее гем Turbolinks. Я заметил, что при нажатии на ссылку макет все еще отображается на стороне сервера, но JavaScript Turbolinks просто захватывает тело из этого отображаемого контента. Мой вопрос на стороне контроллера, можно ли определить, сделан ли запрос через Turbolinks или нет. По сути, в случае, если запрос сделан через Turbolinks, я хочу установить для макета значение false, чтобы не выполнять ненужный код. В моем ApplicationController у меня уже есть следующий код:

# Don't use layout when AJAX request
layout proc { |controller| controller.request.xhr? ? false: "application" }

Этот код предотвращает рендеринг заголовка запроса AJAX, если я делаю запрос AJAX через jQuery, однако, похоже, он ничего не делает, когда дело доходит до Turbolinks.


person Community    schedule 09.08.2013    source источник
comment
Не нарушит ли рендеринг без макета процесс Turbolinks? Турболинки будут (цитата): keep the current page instance alive and replaces only the body and the title in the head. Таким образом, похоже, что Turbolinks полагается на отправку полного макета страницы.   -  person zwippie    schedule 19.05.2014


Ответы (1)


Хотя это немного хак, я обнаружил, что проверка заголовка на «X-XHR-Referer», похоже, помогает.

unless request.headers["X-XHR-Referer"].present? 
    do_some_stuff
end

Кажется, что Turbolinks добавляет заголовок для некоторой обработки перенаправления. Хотя это может измениться в будущем.

person asdacap    schedule 19.05.2014
comment
Некоторое время назад я реализовал свою собственную уродливую версию Turbolinks для достижения этой цели, но обнаружил, что иногда при использовании кнопки «Назад» в браузере страница отображалась без тела, и все выглядело ужасно. Я быстро решил, что это не стоит усилий, и я должен просто использовать для своих нужд либо PJAX, либо стандартный AJAX. Но спасибо за акцию. - person ; 20.05.2014