Rails:如何从“each”方法中排除一个项目

时间:2012-07-11 06:39:33

标签: ruby-on-rails ruby each

我正在使用Enki博客宝石作为一种内容管理系统。它允许您创建帖子和页面。它会自动生成两个页面(Home和Archives)。我还创建了另外两个示例页面,服务和产品,并将创建更多。因此,当我想列出主页上的所有页面时,我这样做

  <% page_links_for_navigation.each do |link| -%>
    <li><%= link_to(link.name, link.url) %></li>
  <% end -%>


Home
Archives
Services
Products

我可能希望将来创建更多页面,因此最好循环遍历所有页面,而不是硬编码每个页面的URL。

但是,如果我想要排除其中一个页面(即档案),我将如何更改该代码。 Enki自动生成该页面,但没有给我一个删除它的选项。此外,我不想删除档案,因为我想在我发布链接到博客文章的地方使用它。

因此,简而言之,我如何从此代码中排除一个特定页面

  <% page_links_for_navigation.each do |link| -%>
    <li><%= link_to(link.name, link.url) %></li>
  <% end -%>

Archives的网址是localhost:3000 / archives

2 个答案:

答案 0 :(得分:8)

另一种方式

<% page_links_for_navigation.each do |link| -%>
   <% next if link.name == 'Archives' %>
   <li><%= link_to(link.name, link.url) %></li>
<% end -%>

答案 1 :(得分:5)

  <% page_links_for_navigation.each do |link| -%>
    <%  if link.name != 'Archives' %>    
      <li><%= link_to(link.name, link.url) %></li>
    <% end %>
  <% end -%>

或使用page_links_for_navigation.reject {|page| page.name == 'Archives'}.each

修改

添加更多页面!['Archives', 'Home'].include? link.name或只添加您要添加​​的页面并删除!

http://www.humblelittlerubybook.com/

http://www.ruby-doc.org/docs/ProgrammingRuby/