【问题标题】:Loop Trick - How to show one attribute if...?循环技巧 - 如果......如何显示一个属性?
【发布时间】:2010-09-22 07:03:06
【问题描述】:

我正在寻找一个我们可以在循环中使用的函数:

<% for rink in @rinks_in_region %>  
    <%= rink.city #Show Only if city (n-1) != n %> 
    <%= link_to_rink(rink.name+" Ice Rink",rink) %>
    <br>
<% end -%>

基本上只显示与前一个不同的城市。

有意义吗?感谢您的帮助!

亚历克斯图尔

【问题讨论】:

    标签: ruby-on-rails loops for-loop


    【解决方案1】:

    您可以使用@rinks_in_region 上的group_by 方法按城市对溜冰场进行分组,然后使用这些分组来显示城市和溜冰场。它返回一个哈希值,将您分组的事物(在这种情况下为城市)映射到该组中原始集合中的值。所以:

    <% @rinks_in_region.group_by(&:city).each_pair do |city, rinks| %>  
      <%= city %> 
      <% rinks.each do |rink| %>
        <%= link_to_rink(rink.name+" Ice Rink",rink) %>
        <br/>
      <% end -%>
    <% end -%>
    

    【讨论】:

    • 您也可以使用.group_by(&amp;:city),因为您只返回@rings_in_region 的单个方法/属性。
    • 第一次听说这个 group_by 方法。很棒的东西。 +1
    【解决方案2】:
    <% prev_city = nil -%>
    <% for rink in @rinks_in_region %>
        <%= rink.city if rink.city != prev_city %>
        <% prev_city = rink.city -%>
        <%= link_to_rink(rink.name+" Ice Rink",rink) %>
        <br>
    <% end -%>
    

    【讨论】:

      【解决方案3】:

      不是红宝石答案,而是引入一个新变量,将其称为“temp”或其他名称,并将其设置为 foreach 中的当前元素。这样,在循环开始时,您就可以访问最后一个循环元素。

      temp = ''
          <% for rink in @rinks_in_region %>  
              <%= rink.city #Show Only if city != temp %> 
              <%= link_to_rink(rink.name+" Ice Rink",rink) %>
              <br>
      
      temp = city
      
          <% end -%>
      
      temp = ''
      

      【讨论】:

      • 我明白你的意思,非常感谢
      猜你喜欢
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多