现在我的导航部分看起来像这样(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 %>
这样做有更优雅/干燥的解决方案吗?
答案 0 :(得分:9)
与Chuck所说的相似:
<% TARGETS.each do |target| %>
<li>
<%= link_to target.humanize,
{ :controller => target },
class => ('active' if current_controller == target)) %>
</li>
<% end %>
答案 1 :(得分:3)
很容易看到重复的位置。这是一般的形式:
<% 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>
答案 2 :(得分:2)
在github上查看rails-widgets。除了导航之外,它还为rails UI(Tabnavs,工具提示,分类器,show hide toggle,简单的css进度条)提供了大量便利助手。
以下是docs
答案 3 :(得分:1)
结帐link_to_unless_current
。不完全是你要求的,但它很接近。
此外,您可以将这种逻辑放在帮助器中以将其抽象出视图。
答案 4 :(得分:1)
与link_to_unless_current:
略有不同的版本<ul>
<% links.each do |link| -%>
<li><%= link_to_unless_current link.humanize, { :controller => target } %></li>
<% end -%>
</ul>
像这样的东西的好资源是rails docs。
答案 5 :(得分:1)
查看simple-navigation plugin。它是一个“易于使用”的rails插件,用于为rails应用程序创建导航。