Слово об именах
Соглашение об именах для моделей объединения: SingularSingular
. Таблица должна быть названа singular_plural
. has_and_belongs_to_many
- единственная часть Rails, которая на самом деле использует схему именования oddball plural_plural
.
RetreatsTeam # bad
RetreatTeam # better
Еще лучше то, что на самом деле вы даете своим таблицам объединения значимые имена, а не просто имена-заполнители.
1) запрос атрибута из внутренней таблицы соединений в Rails Console.
Поскольку связь между Retreat и RetreatsTeams в одном для многих, вы можете на самом деле получать только агрегаты. В противном случае, какой атрибут должен извлечь из первой строки, последней строки или всех строк?
Так, например, вы можете сделать:
Retreat.joins(:retreats_teams)
.select('retreats.*', 'COUNT(retreats_teams.*) AS retreats_teams_count')
Если вы храните больше данных на присоединяемая таблица, которую вы хотите отобразить, вы хотите перебрать в объединяющей таблице:
@retreat = Retreat.eager_load(retreats_teams: :teams).first
@retreat.retreats_teams.each do |rt|
puts rt.foo
puts rt.team.name
end
2) запрашивать и отображать атрибут в представлении.
В Rails вы обычно просто извлекаете записи в контроллере и затем просматриваете их в представлении:
class ResortsController < ApplicationController
def show
@resort = Resort.includes(:teams).find(params[:id])
end
end
# app/views/resorts/show.html.erb
<h1><%= @resort.name %></h1>
<h2>Teams</h2>
<% if @resort.teams.any? %>
<ul>
<% @resort.teams.each do |team| %>
<li><%= team.name %></li>
<% end %>
</ul>
<% else %>
<p>This resort has no teams</p>
<% end %>