Рельсы как показывать изображение после каждых 2 записей на странице индекса?

#ruby-on-rails

Вопрос:

У меня есть свой index.html.erb, и там отображаются все рецепты, которые есть в базе данных. Но теперь я хочу иметь возможность показывать изображение, которое у app/assets/images меня есть после каждых 2 рецептов. Как это можно было сделать?

index.html.erb

 <%= render partial: 'recipes_list', collection: @recipes, as: :recipes %>

 

список рецептов.html.erb

 <a href="<%= url_for(recipes) %>">
  <article>
    <h2 class="recipe-name"><%= recipe.name %></h2>
  </article>
</a>
 

Решение с помощью each_with_index

   <% @recipe.each_with_index do |recipe, index| %>
 
    <h2 class="recipe-name"><%= recipe.name %></h2>
    <% if (index   1) % 2 == 0 %>
      <div class="photo"><%= image_tag ("recipe.jpg")%></div>
    <% end %>
  <% end %>
 

Комментарии:

1. Не можете ли вы просто использовать each_with_index , а затем использовать индекс в цикле, чтобы отобразить изображение, если оно соответствует интервалу, на котором вы хотите его отобразить? Можете ли вы показать свой код каждого цикла (отредактируйте вопрос, чтобы добавить его).

2. вы можете попробовать функцию по модулю. инициируйте переменную перед циклом i = 0, затем в цикле if (i%2).ноль? затем покажите изображение и увеличьте i на 1.

3. @RockwellRice спасибо, что предположили each_with_index , что это сработало

Ответ №1:

Для этого вы можете использовать in_groups_of функцию.

 <% @recipes.in_groups_of(2, false).each do |group| %>
  <!-- Anything here will appear BEFORE every 2-recipe group -->

  <% group.each do |recipe| %>
    <div class="recipe"><!-- render recipe --></div>
  <% end %>

  <!-- Anything here will appear AFTER every 2-recipe group -->
  <div class="photo"><!-- photo here after recipes --></div>
<% end %>
 

Это даст вам повторяющийся набор photo|recipe|recipe групп.

Комментарии:

1. Спасибо! Я вижу, что это работает, когда я пытаюсь это сделать, но я ищу набор recipe|recipe|photo способов, как я могу это сделать? Я попытался перевернуть его, но все время получал undefined method in recipe

2. Просто переместите часть фотографии ниже group.each блока. Я обновлю ответ, чтобы показать вам.