Rails навигационный вспомогательный метод - PullRequest
0 голосов
/ 30 января 2020

У меня есть помощник по двум рельсам:

  def active_class(link_path)
    current_page?(link_path) ? 'active' : ''
  end

  def active_class_white(link_path)
    current_page?(link_path) ? 'active-white' : ''
  end

Один для обычных ссылок, другой для подменю. Обычно я размещаю ссылку так:

 <%= link_to "Home", root_path(:anchor => 'home'), class: "nav-link #{active_class('/')}", :"data-id" => "home" %>

Теперь вот моя проблема. На моей домашней странице я получил эту ссылку, по которой она будет перемещаться в определенный раздел сайта, поэтому требуется символ, такой как #about. Если я размещу:

<%= link_to "About", root_path(:anchor => 'about'), class: "nav-link #{active_class('/#about')}", :"data-id" => "about" %>

Он по-прежнему помещает активный класс в текст home вместо about (домашняя страница - это одностраничный слайдер).

Другое дело, что для сложных URL, таких как профиль редактирования устройства, я попытался поместить ff:

<%= link_to "Edit Profile", edit_user_registration_path(current_user), class: "dropdown-item #{active_class_white('/users/edit/:id')}" %> 

Размещение /users/edit/:id не работает на URL такого типа: http://localhost:3000/users/edit.13

На этом два вида URL мой код не работает. Любая идея, как заставить их работать или перевернуть это?

1 Ответ

1 голос
/ 30 января 2020

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

Вторая часть вашего вопроса, в которой вы передаете ключ сегмента :id, может быть решена путем передачи помощника маршрута (вместе с объектом) в current_page? вместо явной строки ...

class: <%= active_class(edit_user_registration_path(current_user)) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...