2009-03-01 18 views
11

Teraz mam nawigację częściowe, które wygląda następująco (przyciski x10) ...Szyny: Elegancki sposób obsługi nawigacji?

<% 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 %> 

Czy jest bardziej elegancki/DRY rozwiązanie dla tej operacji?

Odpowiedz

8

W podobny sposób do tego, co Chuck powiedział:

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

i co to są CELE? – DaMainBoss

+0

Co to są CELE? Twój post zawiera również błędy składni. – Dewayne

1

Sprawdź link_to_unless_current. Nie dokładnie to, o co prosiłeś, ale jest blisko.

Można również umieścić ten rodzaj logiki w pomocniku, aby usunąć go z widoku.

3

Łatwo jest zobaczyć, gdzie znajduje się powtórzenie. To wszystko w ogólnej postaci:

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

Dlatego chcemy XXXXX i CLASS być zmienne (ponieważ są to jedyne rzeczy, które zmieniają), a reszta może być prosty szablon.

więc mogliśmy zrobić coś takiego:

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

nieznacznie inną wersję w/link_to_unless_current:

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

Dobrym źródłem dla takich rzeczy są dokumenty na szynach.

2

Zapoznaj się z rails-widgets na github. Zapewnia mnóstwo wygodnych pomocników dla rails UI rzeczy (tabnavs, tooltipy, tableizers, show hide toggle, prosty css progressbar) oprócz nawigacji.

Oto docs

1

Sprawdź simple-navigation plugin. Jest to "łatwa w użyciu" wtyczka do szyny do tworzenia nawigacji dla twoich aplikacji railsowych.

Powiązane problemy