app/views/labware/_relations.html.erb
<section id="relations-table-container" class='info-panel'>
<header>
<a href='#relations-table-collapser' role="button" data-toggle='collapse'>
<h3>Relations
<%= counter_badge asset.parents.size, 'parent' %>
<%= counter_badge asset.children.size, 'child' %>
<%= counter_badge asset.links_as_descendant.indirect.size, 'ancestors' %>
<%= counter_badge asset.links_as_ancestor.indirect.size, 'descendants' %>
<small class='show-hide'>Click to toggle</small>
</h3>
</a>
</header>
<div id="relations-table-collapser" class="collapse in show">
<table id="relations-table" class="sortable">
<thead>
<tr>
<th>Asset</th>
<th>Relationship type</th>
</tr>
</thead>
<tbody>
<% asset.parents.find_each do |parent| %>
<tr>
<td><%= link_to "#{(parent.label or "").titleize}: #{parent.display_name}", labware_path(parent) %></td>
<td>Parent</td>
</tr>
<% end %>
<% asset.children.find_each do |child| %>
<tr>
<td><%= link_to "#{child.label&.titleize}: #{child.display_name}", labware_path(child) %></td>
<td>Child</td>
</tr>
<% end %>
<% asset.links_as_descendant.indirect.includes(:ancestor).find_each do |link| %>
<tr>
<td><%= link_to "#{(link.ancestor.label or "").titleize}: #{link.ancestor.display_name}", labware_path(link.ancestor) %></td>
<td>Ancestor</td>
</tr>
<% end %>
<% asset.links_as_ancestor.indirect.includes(:descendant).find_each do |link| %>
<tr>
<td><%= link_to "#{link.descendant.label&.titleize}: #{link.descendant.display_name}", labware_path(link.descendant) %></td>
<td>Descendant</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</section>