Визуализация активного элемента меню в частичном меню в рельсах 3 - PullRequest
2 голосов
/ 21 октября 2010

У меня есть динамическое подменю, которое отображается в зависимости от того, на какой странице находится пользователь.Я поместил следующий код в частичную строку _sub_menu.html.erb:

<a href="/dashboard/index" class="current">Index</a>
<a href="/dashboard/account">Account</a>
<a href="/dashboard/payments">Payments</a>`

В моем основном окне я вызываю <%= render 'sub_menu' %>, что работает.

Однако я хочу изменитькласс = "текущая" часть, в соответствии с которой на странице находится пользователь.Я надеялся сделать это из рендера, передав локальный параметр и выполнив рендеринг в соответствии с этим, но это выглядит глупо:

<%= render 'sub_menu' , :locals => {:active_item => 'payments'} %>

Плюс логика становится действительно безобразной.Есть ли лучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 21 октября 2010

Вы можете определить дополнительный вспомогательный метод, который будет вызывать link_to_unless_current :

def link_to_current_with_class(name, current_class, options = {}, html_options = {}, &block)
  link_to_unless_current(name, options, html_options) do
    options[:class] = current_class + " " + options[:class]
    link_to(name, options, html_options)
  end
end

и затем вызывать его из вашей частичной навигации:

<%= link_to_current_with_class "Index", "current", "/dashboard/index" %>
2 голосов
/ 21 октября 2010

Я думаю, что вы можете использовать параметр блока для link_to_unless_current, который предоставляет контент для отображения, когда ссылка является текущей страницей:

<%= link_to_unless_current("Index", :action => 'index') { link_to("Index", {:action => 'index'}, {:class => 'current' }) %>
<%= link_to_unless_current("Account", :action => 'account') { link_to("Account", {:action => 'account'}, {:class => 'current' }) %>
<%= link_to_unless_current("Payments", :action => 'payments') { link_to("Payments", {:action => 'payments'}, {:class => 'current' }) %>

Это работает

...