У меня есть две сущности, проекты и пользователи. Они моделируются в Rails с использованием Mongoid с двумя экземплярами Document, User и Project.
В этой системе один пользователь может создать один проект, но многие пользователи могут следить за многими проектами. Например, как user_id 1, я создал project_id 1. Но user_ids 10, 11, 40 и 60 все следуют project_id 1. Мне нужно представить отношение «многие ко многим» между пользователями и проектами и представить конкретный user_id как Создатель проекта, назначить ему права на редактирование.
Практически говоря, когда пользователь входит в систему, он должен иметь возможность видеть все проекты, за которыми он следит, включая любые созданные им, смешанные с другими проектами, созданными другими пользователями. Его особый статус создателя никак не повлияет на этот список. Когда пользователь просматривает конкретный проект, он должен иметь возможность просматривать всех пользователей, следующих за проектом, и, если он является его создателем, он может добавлять новых подписчиков и удалять существующих.
В СУБД я представлял бы это с помощью таблиц users
, projects
и таблицы соединений users_projects
с флагом is_creator
. Это легко позволило бы мне выбрать, какие проекты может видеть пользователь, а какие пользователи являются последователями, включая пользователей, которые являются создателями проектов.
Mongoid поддерживает отношения «многие ко многим», но, в отличие от СУБД, я не могу установить флаг для отношений. Вместо этого я думаю, что добавлю поле creator
к документу projects
, которое будет содержать ссылку на поле _id
в документе пользователя.
Отношения пользователь-> проекты могут выглядеть следующим образом
class User
has_and_belongs_to_many :projects
end
class Project
has_and_belongs_to_many: users
end
Но я не могу понять, как отобразить отношение creator-> creation_projects. Я полагаю, что могу ссылаться на создателя пользователя в Project
как belongs_to :creator, :class_name => 'User'
, но я не уверен, как настроить другую сторону.
Как лучше всего смоделировать эти отношения в Mongoid?