@maxprof
Студент

Как предотвратить вывод дубликата записи в цикле?

Здравствуйте, у меня есть такой цикл:
<% @session.number_of_session_places.times do |session| %>
<% n = n+1 %>
  <div class="place_block" style=""><%= n %></div>
  <% @session.places.each do |p| %>
    <% if p.place_number == n %>
        <div class="place_block" style="background-color: black"><%= n %></div>
    <% end %>
  <% end %>
<% end %>

По понятным причинам он выводит сначала блок
<div class="place_block" style=""><%= n %></div>
А потом
<div class="place_block" style="background-color: black"><%= n %></div>

С одинаковым номером.
Остальные записи выводятся без дубликатов. Подскажите как решить эту проблему, не могу логически продумать решение.
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
mbeloshitsky
@mbeloshitsky
Вебдев, систем оперейшонс, ж.д. автоматика
Основная проблема с данным кодом - неправильно подобраны структуры данных. Поэтому у вас тут два цикла, хотя по логике вещей нужен всего-лишь один. Отталкиваясь от того, что уже есть, я бы сделал как-нибудь вот так:
<% reserved = Hash[ @session.places.map { |p| [p.place_number, p] } ] %>
<% @session.number_of_session_places.times do |session| %>
  <% n = n+1 %>
  <div style="<%= reserved.include? n ? 'background: black;' : '' %>">
    <%= n %>
  </div>
<% end %>

Но по-хорошему, вам нужно модели/контроллеры дорабатывать, в шаблонах кода
<% reserved = Hash[ @session.places.map { |p| [p.place_number, p] } ] %>

быть не должно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы