Я пытаюсь объединить пользователей в семьи. Семья может иметь одного родителя и нескольких членов, поэтому родитель также считается участником.
Я попробовал ответы, предоставленные здесь Ассоциация и миграция между пользователями и командами (рельсы) и здесь рельсы многие ко многим самостоятельно присоединяются , чтобы попытаться заставить его работать, но нетудача
Вот что у меня есть
class User < ActiveRecord::Base
# this defines the parent to members fine and you can get them
# only if you have the parent
has_many :memberships, :class_name => 'Family', :foreign_key => 'user_id'
has_many :family_members, :through => :memberships, :source => :registrar
# trying to define that user is also a member of family
belongs_to :registrar_family, :foreign_key => 'member_user_id'
end
class Family < ActiveRecord::Base
belongs_to :user, :class_name => 'User', :foreign_key => "user_id"
has_many :users, :class_name => 'User', :foreign_key => "id"
end
Так что, если у меня есть пользователь 1, который является родителем и имеет четыре члена, я могу использовать
user.family_members # to get family members for this parent
, но как это сделать? Я делаю так, что я также могу получить полную семью от членов
примеры DB
Users:
id, name
1, King
2, Queen
3, Prince
4, Duaghter
Users Family:
id,user_id, member_user_id
1, 1, 2
1, 1, 3
1, 1, 4
Как мне сказать что-то вроде
user = User.find(4)
user.family.parent.members # which would return a family association
Полное решениеибо это (если кому-то интересно):
class User < ActiveRecord::Base
def family
members = Family.where("user_id = ? OR member_user_id = ?", self.id, self.id)
# if members is only 1 person then this person is a member only
# then get all members from parent
if members.count == 1
members = members.first.parent.family
end
members
end
def family_count
# if there is family then count is family + parent else 0
family.count > 0 ? family.count + 1 : 0
end
end
class Family < ActiveRecord::Base
belongs_to :parent, :class_name => 'User', :foreign_key => "user_id"
end