#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