Исходя из ваших данных выше, я думаю, что вы просто, ниже пример кода для вашей проблемы выше
в вашем контроллере вы можете присоединять условия, это также нетерпеливо загружает ваш запрос, так что ваша база данных просто вызывается только один раз
ниже приведен пример для вашего контроллера
@header_groups = Group.joins(categories: :exams).
where("groups.published = ? AND exams = ?",true,true).
order("slug")
, и ваше представление будет отображаться только на основе @header_groups, для сдачи экзаменов вы можете использовать @header_examps = group.exams (помните, что вы также упоминали в своей моделиотношения, которые проходит группа (проходит множество экзаменов по категориям)
<% @header_groups.each do |group| %>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdown-3" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<%= group.name %><span class="caret"></span>
</a>
<div class="dropdown-menu" aria-labelledby="dropdown-3">
<% @header_examps = group.exams %>
<% @header_exams.each do |exam| %>
<a class="dropdown-item" href="/<%= exam.group.slug %>/<%= exam.slug %>/">
<%= exam.name %>
</a>
<!--TODO: use <a class="active"> to denote the current page and possibly category-->
<% end %>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/<%= group.slug %>/">
All <%= group.name %>
</a>
</div>
</li>
<% end %>
Обновление с оригинального плаката с окончательным рабочим кодом:
То, что в итоге сработало для меня, было небольшим вариантомэтот ответ(Ответ, как написано выше, повторяет весь групповой цикл для каждого экзамена, а не только для каждой группы.)
Контроллер:
@header_groups_v3 = Group.where(published: TRUE).
order("slug")
Просмотр:
<% @header_groups_v3.each do |group| %>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="dropdown-3" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<%= group.name %><span class="caret"></span>
</a>
<div class="dropdown-menu" aria-labelledby="dropdown-3">
<% @header_examps = group.exams %>
<% @header_examps.each do |exam| %>
<a class="dropdown-item" href="/<%= exam.group.slug %>/<%= exam.slug %>/">
<%= exam.name %>
</a>
<!--TODO: use <a class="active"> to denote the current page and possibly category-->
<% end %>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/<%= group.slug %>/">
All <%= group.name %>
</a>
</div>
</li>
<% end %>