English 中文(简体)
Rails:处理导航的优雅方式?
原标题:
  • 时间:2009-03-01 23:49:27
  •  标签:

现在我有一个导航部分,看起来像这样(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 %>

有没有更优雅/干燥的解决方案来解决这个问题?

最佳回答

与Chuck所说的类似:

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

很容易看出其中的重复。它们都是一般形式:

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

在 GitHub 上查看 rails-widgets。它提供了许多方便的辅助工具,用于 Rails UI 方面的内容(选项卡导航、工具提示、表格化、显示/隐藏切换、简单的 CSS 进度条),以及导航。

以下是文档

请查看link_to_unless_current。虽然不完全符合您的要求,但很接近。

此外,您可以在助手中放置此类逻辑,以将其抽象出视图。

检查一下 简易导航插件。它是一个易于使用的Rails插件,用于创建Rails应用程序的导航。

稍微不同的版本,带有link_to_unless_current:

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

类似这样的好资源是Rails文档。





相关问题
热门标签