Как настроить классы для полиморфной, самоссылочной группы моделей? - PullRequest
2 голосов
/ 20 августа 2011

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

Примеры:

  • Пользователи Энди , Боб , Чарли и Дэвид входят в группу 1-й форвардер .
  • Пользователи Эдди , Фрэнк , Джордж , Ховард , Игги и Джек находятся в группе 1-го полузащитника .
  • Пользователи Кенни , Ленни , Макс , Нед , Оскар , Питер и Куин входят в группу 1-го защитника .
  • Пользователь Рита - единственный пользователь в группе 1-й вратарь .
  • Пользователи Энди , Боб , Эдди , Фрэнк и Кенни также входят в альфа-баскетболисты группа.
  • Группы 1-й форвардер , 1-й полузащитник , 1-й защитник и 1-й вратарь в составе 1-й футболист группа.
  • Группы 1-й форвардер , 2-й полузащитник , 3-й защитник и 4-й вратарь входят в состав футболистов всех звезд группа.

Насколько я понимаю, для этого потребуется полиморфный, самоссылочный набор моделей.

Исходя из этого понимания, у меня есть три модели и соответствующие классы:

Пользователи
- id: целое число
- имя: строка
- плюс другие персональные данные

class User < ActiveRecord::Base 
  has_many :memberships, :as => :child 
  has_many :groups, :through => :memberships 
end

Группы
- id: целое число
- имя: строка
- плюс другие групповые данные

class Group < ActiveRecord::Base
  # parental membership role
  has_many :memberships
  has_many :users, :through => :memberships

  # child membership role
  has_many :memberships, :as => :child  
end

Членство
- child_id: целое число
- group_id: целое число
- тип-членства: строка
- плюс другие данные о членстве

class Membership < ActiveRecord::Base
  belongs_to :child, :polymorphic => true
  belongs_to :group
end

Когда я пытаюсь получить доступ к ребенку через что-то вроде Membership.first.child, я всегда получаю => nil ответ.

Правильно ли настроены мои модели и классы?
Если нет, то что я сделал неправильно?
Если да, то как мне получить информацию о ребенке?

Или я неправильно подхожу к этому, и если да, то как мне подойти к нему?

1 Ответ

1 голос
/ 20 августа 2011

Столбцы полиморфной ассоциации должны быть child_id и child_type .

...