Добавить активный класс ко всем относительным действиям внутри контроллера Ruby on Rails - PullRequest
0 голосов
/ 29 ноября 2018

Я использую следующий helper для добавления is_active класса css к активным ссылкам в моей панели навигации.

# application_helper.rb
def active_link_to(name = nil, options = nil, html_options = nil, &block)
  active_class = html_options[:active] || "is_active"
  html_options.delete(:active)
  html_options[:class] = "#{html_options[:class]} #{active_class}" if current_page?(options)
  link_to(name, options, html_options, &block)
end

Этот код работает отлично.Тем не менее, я хочу сохранить класс is_active на каждой странице, связанной с контроллером.Например, вот мой маршрут контроллера:

# routes.rb
resources :catalogs, path: "s", only: [:index, :show] do
  resources :products, path: "", only: [:show]
end

и представьте, что у меня есть 100 различных каталогов.Я хочу сохранить is_active на странице индекса, пока пользователь переключает показ страниц.

Ссылка на моей навигационной панели:

= active_link_to "Products", catalog_path(1), class: "navbar_link"

Обратите внимание, что в предыдущемline Я перехожу к самому первому каталогу, а не к странице index.

Спасибо за вашу помощь и время!

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете попробовать active_link_to gem, который делает именно то, что вы хотите.Было бы что-то вроде этого (не проверено)

active_link_to 'Products', catalog_path(1), active: [['catalogs'], ['index', 'show']], class_active: 'is_active'

...