1) У меня есть вид отступления /: id, где я могу отображать названия команд, которые прикреплены к указанному c отступлению. ... Однако, вместо того, чтобы просто отображать имя, как бы я отображал название команды и ссылку на команду team /: id
Не используйте .pluck
, если вы на самом деле требуется только один столбец в виде массива или необработанные данные из нескольких столбцов без создания экземпляров модели. .pluck
злоупотребляет и злоупотребляет. Не имеет смысла что-то выщипывать, если потом вам все равно придется извлекать остальные столбцы позже.
Вместо этого просто выполните итерации по экземплярам модели:
<% @resort.teams.each do |team| %>
<%= link_to team.name, team %>
<% end %>
Если вы объявили маршрут с resources :teams
. Rails определит маршрут сам по себе - это сила соглашения о конфигурации.
2) В этом представлении отступления /: id я также хотел бы отобразить пользователей, которые являются частью команда, но я действительно застрял, пытаясь присоединиться от go до sql, и т.д. c.
На самом деле вам не нужно выполнять какую-либо работу по присоединению. Просто попытайтесь загрузить ассоциацию, чтобы избежать n + 1 запросов:
def show
@resort = Resort.eager_load(teams: :users).find(params[:id])
end
<% @resort.teams.each do |team| %>
<div class="team">
<h3><%= link_to team.name, team %></h3>
<h4>Members:</h4>
<% if team.users.any? %>
<ul>
<%= team.users.each do |user| %>
<li><%= link_to user.name, user %></li>
<% end %>
<ul>
<% end %>
</div>
<% end %>
Еще одно замечание по поводу именования
Имя TeamMember вызывает сожаление, так как подразумевает, что это фактическое лицо, которое является членом и не просто модель соединения.
Членство или позиция - лучший выбор имени.
class Team
has_many :memberships
has_many :members, through: :memberships
end
class Membership
belongs_to :team
belongs_to :member, class_name: 'User'
end
class User
has_many :memberships, foreign_key: :member_id
has_many :teams, through: :memberships
end
Это позволит вам перебирать team.members
и фактически получать пользователей вместо некоторой модели соединения. Приведенный выше пример будет читать после рефакторинга:
def show
@resort = Resort.eager_load(teams: :members).find(params[:id])
end
<% @resort.teams.each do |team| %>
<div class="team">
<h3><%= link_to team.name, team %></h3>
<h4>Members:</h4>
<% if team.members.any? %>
<ul>
<%= team.members.each do |member| %>
<li><%= link_to member.name, member %></li>
<% end %>
<ul>
<% end %>
</div>
<% end %>