Если пользователь может принадлежать ко многим командам и может иметь много ролей, logi c может выглядеть примерно так:
Вам нужна таблица соединений, чтобы обеспечить отношение N-to-N между пользователем и доской модель. Но дело в том, что когда вы добавляете пользователя на доску, вы даете ему роль в этом участии. Это хорошее место для хранения информации о роли в этом участии. Таким образом, наша объединенная таблица UsersBoards превращается в модель участия (или как вы хотите ее называть). Наша модель участия теперь содержит информацию о пользователе, плате и роли (все они имеют внешний ключ).
Я не совсем понял назначение модели Team, но я думаю, что добавить пользователя в него легко команда, когда это необходимо. Это не повредит нашей логике c.
Кроме того, если вы не планируете добавлять дополнительные функции в будущем, роль также может быть перечислением.
class User < ApplicationRecord
has_many :participations
has_many :boards, through: :participations
end
class Board < ApplicationRecord
has_many :participations
has_many :users, through: :participations
end
class Participation < ApplicationRecord
belongs_to :user
belongs_to :board
enum role: [ :admin, :editor, :viewer ]
end
user = User.first
user.participations.first.board #Board
user.participations.first.admin? #true
user.boards
И Вы можете добавить вспомогательные методы или делегировать в модели для сокращения запроса.