Loop Trick - Как показать один атрибут, если ...? - PullRequest
2 голосов
/ 22 сентября 2010

Я ищу функцию, которую мы можем использовать в цикле для этого:

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

В основном просто показывать город, только если он отличается от предыдущего.

Имеет смысл? Спасибо за вашу помощь!

Alextoul

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Вы можете использовать метод group_by на @rinks_in_region для группировки катков по городам, а затем использовать эти группировки для отображения городов и катков. Он возвращает хеш, сопоставляющий объект, по которому вы группируете, в данном случае город, со значениями в исходной коллекции, которые находятся в этой группе. Итак:

<% @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 -%>
0 голосов
/ 22 сентября 2010

Не рубиновый ответ, но введите новую переменную, назовите ее «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 = ''
0 голосов
/ 22 сентября 2010
<% 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 -%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...