2016-07-05 4 views
1

Я заметил, что моя навигация/маршрутизация не работают, поскольку я думал, что это произойдет, когда я буду в другом контроллере.rails routing не работает, как ожидалось, когда в другом контроллере

Мой маршрут:

get 'help/version_history' => 'about_and_helps#version_history' 

И это, как я ссылки на него:

<%= link_to "Version History", '/help/version_history' %> 

Если я показываю конкретную жалобу, а затем попытаться перейти по ссылке меню для версии истории, я получаю сообщение об ошибке.

Страница, которую вы искали, не существует.
Возможно, вы ошиблись адреса, или страница, возможно, была перемещена.

URL-адрес является http://cctweb:9298/complaints/help/version_history

Если я на индексной странице жалоб, нажав на ссылку берет меня на нужную страницу с URL из http://cctweb:9298/help/version_history

ответ

3

Ошибка заключается в относительности (возможно, из-за ведущая косая черта в приведенном примере).

Чтобы сделать это проще, и следовать соглашениям Rails, я рекомендую назначить имя вашего маршрута:

get 'help/version_history', to: 'about_and_helps#version_history', as: 'my_route_name' 

Обратите внимание на as вариант. Это говорит маршрутизатору, что этот маршрут имеет имя, которое, в моем примере, устанавливается в my_route_name

Теперь вы можете связать со следующим:

<%= link_to "Version History", my_route_name_url %> 

Это будет заботиться о вопросах теории относительности и всегда ссылайтесь на этот конкретный маршрут. Даже если вы измените URI маршрута по дороге, все будет работать, используя имя маршрута.

Других вариантов - и примеры - можно найти в Rails Routing Docs

+0

Это путь, имеющий псевдоним позволить использовать их использовать и один день, если вам нужно изменить ссылку, есть только одно место, чтобы изменить его .... – lcguida

+0

Спасибо - Это сработало, и теперь я понимаю это немного лучше. –