Подтвердить что ты не робот

Rails: Элегантный способ обработки навигации?

Прямо сейчас у меня есть частичная навигация, которая выглядит так (кнопки x10)...

<% if current_controller == "territories" %>
    <li><%= link_to "Territories", {:controller => 'territories'}, :class => 'active'  %></li>
<% else %>
    <li><%= link_to "Territories", {:controller => 'territories'}  %></li>
<% end %>
<% if current_controller == "contacts"  %>
    <li><%= link_to "Contacts", {:controller => 'Contacts'}, :class => 'active'  %></li>
<% else %>
    <li><%= link_to "Contacts", {:controller => 'Contacts'}  %></li>
<% end %>

Есть ли более элегантное/DRY-решение для этого?

4b9b3361

Ответ 1

В том же духе, что сказал Чак:

<% TARGETS.each do |target| %>
  <li>
    <%= link_to target.humanize, 
      { :controller => target }, 
      class => ('active' if current_controller == target)) %>
  </li>
<% end %>

Ответ 2

Довольно легко увидеть, где находится повторение. Все это общая форма:

<% if current_controller == XXXXX %>
  <li><%= link_to XXXXX, {:controller => XXXXX}, CLASS %></li>
<% else %>
  [do the same stuff minus ":class => 'active'"]
<% end %>

Итак, мы хотим, чтобы XXXXX и CLASS были переменными (так как это единственные вещи, которые меняются), а остальные могут быть простым шаблоном.

Итак, мы могли бы сделать что-то вроде этого:

%w(Contacts Territories).each |place|
  <% class_hash = current_controller == place ? {:class => 'active'} : {}
  <li><%= link_to place, {:controller => place}, class_hash)</li>

Ответ 3

Отметьте rails-widgets в github. Он предоставляет тонну вспомогательных помощников для элементов UI рельсов (tabnavs, всплывающих подсказок, планшетов, show hide toggle, простой css progressbar) в дополнение к навигации.

Вот docs

Ответ 4

Отъезд link_to_unless_current. Не совсем то, что вы просили, но это близко.

Кроме того, вы могли бы поставить эту логику в помощнике, чтобы отвлечь ее от представления.

Ответ 5

Несколько другая версия w/link_to_unless_current:

<ul>
<% links.each do |link| -%>
<li><%= link_to_unless_current link.humanize, { :controller => target } %></li>
<% end -%>
</ul>

Хорошим ресурсом для таких вещей являются рельсы docs.

Ответ 6

Проверьте плагин простой навигации. Это "простой в использовании" плагин rails для создания навигационных приложений для ваших рельсовых приложений.