2009-03-01 154 views
11

現在我有部分導航看起來像這樣(X10按鈕)...Rails:處理導航的優雅方式?

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

是否有這樣做的更優雅/乾的解決方案?

回答

8

與此類似什麼查克說:

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

什麼是TARGETS? – DaMainBoss 2012-03-09 11:44:44

1

結賬link_to_unless_current。不完全是你要求的,但它很接近。

此外,你可以把這種邏輯放在幫助器中將它抽象出來。

3

很容易看出重複在哪裏。這是所有的一般形式:

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

因此,我們要XXXXX和類中的變量(因爲這些都是改變的唯一的東西),其餘的可以是一個簡單的模板。

所以,我們可以做這樣的事情:

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

一個稍微不同的版本W/link_to_unless_current:

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

像這樣的東西的好資源是rails文檔。

2

在github上查看rails-widgets。除了導航之外,它還爲Rails用戶界面提供了大量的便利幫助(Tabnavs,工具提示,tableizers,show hide切換,簡單的css進度條)。

這裏是docs

1

退房的simple-navigation plugin。這是一個易於使用的rails插件,用於爲您的rails應用程序創建導航。

相關問題