Rails группа и объединить запятой - PullRequest
0 голосов
/ 03 июля 2019

Я группирую часы работы каждого дня следующим циклом:

 <% @open_hours.group_by(&:day).each do |day, open_hours| %>
      <% if day == 1 %>
        <strong>Monday:</strong>
          <% open_hours.each do |open| %>
            <%= I18n.l open.opens, :format => :custom %> - <%= I18n.l open.closes, :format => :custom %><%= "," unless open_hours == open_hours.last %>
          <% end %>
        <% end %>
 <% end %>

Вот что я получаю:

enter image description here

Как видите, я пытаюсь добавить запятую в конце каждого значения массива, кроме последнего:

<%= I18n.l open.opens, :format => :custom %> - <%= I18n.l open.closes, :format => :custom %><%= "," unless open_hours == open_hours.last %>

Но по какой-то причине она работает неправильно.Есть ли лучший способ реализовать это ????Сначала соедините два значения с помощью -, а затем разделяйте каждое открытие-закрытие запятой, за исключением последнего значения.

1 Ответ

2 голосов
/ 03 июля 2019

Вы не сравниваете, то, что вы думаете, вы сравниваете:

<%= "," unless open_hours == open_hours.last %>

Вы сравниваете весь массив open_hours с последним элементом того же массива open_hours.last

Вы, вероятно, хотели сравнить текущее время открытия, чтобы проверить, был ли это последний элемент:

<%= "," unless open == open_hours.last %>

Но в любом случае, есть гораздо более хороший способ сделать это, если у вас есть массив, вы можете просто соединить его вместе следующим образом:

<%= open_hours.map do |open| %>
  <% I18n.l open.opens, :format => :custom %> - 
  <% I18n.l open.closes, :format => :custom %>
<% end.join(', ') %>

И, вероятно, для этого лучше написать какой-нибудь помощник или метод модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...