0

У меня есть модель person и модель group. Есть два вида людей: лидеры возглавляют группу, а участники участвуют. Мне нужны hbtm-отношения между лидерами и группами и has_many-отношения между участниками и группами. Можно ли сделать это с той же моделью, person, предоставляя какое-то условие (является лидером/участником) в модели?has_and_belongs_to_many и has_many_through между одними и теми же моделями?

class Person < ActiveRecord::Base 
    has_and_belongs_to_many :groups 
    has_many :participations 
    has_many :groups, :through => :participations 
    ... 
end 

Я хотел бы сделать это с помощью одной модели, person, потому что пользователи либо руководители или участники, но каждый пользователь должен быть человек, т.е. User belongs_to :person.

+0

Я могу понять, когда лидер имеет много групп. Но уверены, что в группе много лидеров? – peresleguine

+0

Да, у моих групп может быть много лидеров. Подумайте о группе лидеров, которая организует группу. – ewi

ответ

0

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

class Person < ActiveRecord::Base 
    has_many :relations 
    has_many :groups, :through => :relations 
    ... 
end 

class Group < ActiveRecord::Base 
    has_many :relations 
    has_many :persons, :through => :relations 
    ... 
end 

class Relation < ActiveRecord::Base 
    belongs_to :person 
    belongs_to :group 
end 

таблицы «отношения» должны быть рядом с person_id и GROUP_ID, еще одно поле, называется, например, «лидер», и значение должно быть истина/ложь или 1/0. Итак, если личность группы является лидером, значение должно быть 1/true, если не тогда 0/false

Смежные вопросы

 Смежные вопросы