помощники по ссылкам, текущим страницам и навигации

#ruby-on-rails #ruby-on-rails-3

#ruby-on-rails #ruby-on-rails-3

Вопрос:

Я пытаюсь сохранить вкладку на странице, которую нужно выбрать, проверив контроллер. Т.Е. любая страница, на которой отображается Products контроллер, должна сохранять Product выбранную вкладку. Кажется, я не могу найти правильный подход. Я подумывал о создании вспомогательного метода, но кажется немного сложным поместить помощника в мой link_to помощник. Вот мое предположение о том, как я могу заставить это работать:

 <%= link_to "Products", products_path, current_controller?('products') ? :class => 'selected' %>
  

У кого-нибудь есть идея получше?

Ответ №1:

И проблема не будет только в одном месте, у вас будет много вкладок, и на каждой вкладке будут правила, для каких комбинаций контроллеров действий она будет активна / выбрана.

Это распространенная проблема, и некоторые люди написали «плагины» для того же самого.

Я предлагаю вам написать помощники. Создайте свой собственный мини-DSL. Решите для себя, на что легко и приятно смотреть:

 <%= link_to_tab_for("Products", products_path, :controller => "sss", :action => "", :other_html_options => {})
  

Следующим шагом реализуйте этот метод в helpers / application.rb

 def link_to_tab_for(name, path, options)
  controller = options.delete(:controller)
  action = options.delete(:controller)
  klass = [].push(options[:class]).compact
  if current_controller?(controller) amp;amp; (action ? current_action?(action) : true)
    klass.push("selected")
  end
  options[:class] = klass.empty ? "" : klass.join(" ")
  link_to(name, path, options)
end
  

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

Комментарии:

1. Спасибо за вашу помощь, я делаю что-то очень похожее на это. JD