Помощник пути Rails не переписывает URL-адрес в панели местоположения

У меня есть маршрут, который перенаправляет корень в /welcome/about правильно: root to: redirect('/welcome/about')

Когда я запрашиваю localhost:3000/ из моей строки местоположения, он перенаправляет на localhost:3000/welcome/about как ожидалось.

Однако, когда я нажимаю ссылку <%= link_to app_title, root_url %> с помощью помощника пути (например, <%= link_to app_title, root_url %>), он не изменяет URL-адрес в строке местоположения.

Все остальное работает так, как ожидалось. Link_to отображает как localhost:3000, я получаю ответ 301 с адресом Location: http://localhost:3000/welcome/about, а контент отображается из правильного шаблона. Я подтвердил эти результаты в Firefox и Chrome на Ubuntu 14.04.

Может ли кто-нибудь объяснить это поведение браузера? Есть ли обходной путь?

1 ответ

Это звучит как побочный эффект турбовинтов.

См. Https://github.com/rails/turbolinks/issues/22

Дальнейшее копание показывает, что эта проблема была решена путем добавления заголовка X-XHR-Redirected-To который turbolinks берет на себя, чтобы отразить перенаправление в адресной строке. Он работает, когда вы вызываете redirect_to в контроллере, однако он не работает при перенаправлении root в routes.rb. Это пахнет ошибкой, поэтому я создал проблему: https://github.com/rails/turbolinks/issues/434

В качестве быстрого обходного пути вы можете добавить атрибут data-no-turbolink для тега привязки (<%= link_to app_title, root_url, data: {'no-turbolink' => true} %>). Это приведет к отключению turbolinks только для этой связи. Или вы можете использовать именованный помощник маршрута, который идет непосредственно в /welcome/about.

licensed under cc by-sa 3.0 with attribution.