Вы можете создать таблицу групп, которая ссылается на себя.Это позволило бы хранить все данные вашей группы в одной таблице, и волшебство делается с помощью ассоциаций.
У Райана Бейтса есть Railscast , который, вероятно, можно настроить в соответствии с вашей ситуацией.например, не дружеские отношения, наличие собственности или что-то в этом роде.
Редактировать: помогает только один родитель.Похоже, что плагин acts_as_tree , вероятно, будет работать для поставленной задачи.Для этого плагина у Райана Бейтса также есть эпидсод Railscasts .
Цели
1: разрешить группам иметь детей, родителей Решение :acts_as_tree
2: Позволить группам стать или оставаться независимыми. Решение : acts_as_tree.Просто удалите parent_id, и группа станет ее собственным корневым узлом
3: Обеспечить иерархию (например, города не могут иметь другой город в качестве родителя). Решение : Это, вероятно, должно быть выполнено с помощью пользовательской проверки
4: Наследование прав пользователей.Я ожидал, что эта конкретная цель будет самой сложной.Конечно, я не знаю всех входов и выходов того, что "права" означают для вашей заявки, но я сделаю некоторые предположения ... вы заполняете пробелы, где я ошибаюсь.После того, как у вас есть ассоциации между пользователями и группами (и возможные таблицы «прав»). Решение : Чтобы определить, должны ли права применяться к current_user для current_group, а) проверить владение и, если нет, б) перебирать current_group.ancestors до тех пор, пока вы не получите ответ или не достигнете корня.звучит как веселый проект.Я желаю вам удачи с этим!