Тройное соединение в Ruby on Rails - PullRequest
5 голосов
/ 11 марта 2009

У меня есть вопрос относительно ассоциаций в Ruby on Rails. В приложении есть проекты, пользователи, роли и группы. Проект принадлежит группе с пользователями, пользователь может принадлежать ко многим различным группам, но может иметь только одну определенную роль в этой группе. Например:

В одной группе пользователь является владельцем проекта, а в другой - писателем.

Каков наилучший способ реализовать это с помощью встроенных в Rails функций?

Спасибо

1 Ответ

8 голосов
/ 11 марта 2009

Вот очень быстрый набор моделей, которые должны соответствовать вашим требованиям:

class User < ActiveRecord::Base
  has_many :group_memberships
  has_many :groups, :through => :group_memberships
end

class GroupMembership < ActiveRecord::Base
  belongs_to :user
  belongs_to :role
  belongs_to :group
end

class Role < ActiveRecord::Base
  has_many :group_memberships
end

class Group < ActiveRecord::Base
  has_many :group_memberships
  has_many :users, :through > :group_memberships
end

По сути, есть таблица соединений, в которой есть идентификатор пользователя, группы и роли. Я оставлю миграции в качестве упражнения для спрашивающего

...