Выберите сторону для работы, а затем, как предлагает @drhenner, используйте свойство _ids
для создания ассоциации. Например, работая с моделью User
, сначала создайте команды, а затем пользователей, назначая их командам по ходу работы:
teams = Team.create([
{ name: 'Team 1' },
{ name: 'Team 2' },
{ name: 'Team 3' },
# etc.
])
User.create([
{ name: 'User 1', team_ids: [teams[0].id, teams[2].id] },
{ name: 'User 2', team_ids: [teams[1].id, teams[2].id] },
{ name: 'User 3', team_ids: [teams[0].id, teams[1].id] },
# etc.
])
Из комментария выше:
Вы можете настроить несколько отношений для отношения has_many :through
. Вам решать, какие из них вы хотите реализовать. Это все возможности:
class Team < ApplicationRecord
has_many :memberships
has_many :users, through: :memberships
end
class Membership < ApplicationRecord
belongs_to :team
belongs_to :user
end
class User < ApplicationRecord
has_many :memberships
has_many :teams, through: :memberships
end
Итак, при работе с моделью Team
вы можете использовать: team.memberships
и team.users
;
при работе с моделью User
вы можете использовать: user.memberships
и user.teams
;
и если вы имеете дело с моделью соединения, вы можете использовать: membership.team
и membership.user
.
Вы можете не указывать ссылки на модель соединения, если не используете ее, особенно если вы рассматриваете отношения между Team
и User
как стандартные отношения has_and_belongs_to_many
:
class Team < ApplicationRecord
has_many :users, through: :memberships
end
class User < ApplicationRecord
has_many :teams, through: :memberships
end
Это дает вам team.users
и user.teams
.