【问题标题】:Rails: how to exclude one item from an "each" methodRails:如何从“每个”方法中排除一项
【发布时间】:2012-07-10 17:37:38
【问题描述】:

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

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

档案的网址是 localhost:3000/archives

【问题讨论】:

    标签: ruby-on-rails ruby each


    【解决方案1】:
      <% 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/

    【讨论】:

    • 谢谢,这些工作,但如果我试图排除第二页,例如“主页”(以及档案),我会遇到麻烦。例如,我做了 或者,对于拒绝,{|page| page.name == 'Archives', 'Home'} 有什么想法吗?
    • page_links_for_navigation.reject {|page| page.name == 'Archives'}.each+1
    【解决方案2】:

    另一种方式

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多