У меня есть приложение rails, которое включает в себя теги для сообщений в блогах, используя gem act-as-taggable-on. Моя идея - расширить механизм мечения этого драгоценного камня, используя подход с умеренной связью, где я могу выбрать создание нескольких пользователей в качестве владельцев тегов, и они могут выбрать ссылку на один тег на другой как родительский/дочерний.Как построить иерархию тегов на рельсах с помощью act-as-taggable-on
В настоящее время система имеет независимые теги, как Education
, Child Education
и Distance Education
Владелец Тег Education
может выбрать, чтобы выбрать Child Education
и Distance Education
в качестве первого ребенка уровня и связать их вместе. Это отношение не будет видно до тех пор, пока оно не будет одобрено таксономистом (администратором тега).
Аналогичным образом, конечный пользователь может также предлагать тег Distance Education
быть дочерним по отношению к Education
, и этот запрос станет видимым администратору тега. Основываясь на его утверждении, отношения будут установлены.
Это несколько вопросов, я, относящиеся к вышеуказанному требованию: -
Это рекомендуется расширенный камень или я должен использовать независимую модель мечения написанной с нуля, чтобы поддержать эту иерархическую систему?
Если я продолжу схему, предоставленную драгоценным камнем, какую модель следует использовать для разработки такого требования. В частности, следует ли использовать одну таблицу с столбцом parent_id с идентификатором тега и именем тега? Или я должен поддерживать свои отношения в отдельной таблице со многими-ко-многим ассоциациям (tag_id, parent_tag_id (как внешний ключ)).
Я также новичок в структурах данных, поэтому мне понадобятся некоторые исходные входы для выбора алгоритмов для эффективного перехода между семейством тегов. Использование связанного списка было одним из моих вариантов, однако, учитывая мантру Rails о конфигурации, я действительно не знаю, как это сделать.
Спасибо Trompa. Я думаю, что этот ответ затрагивает большинство моих проблем. – ArkoD
@Trompa - Нет циклов? Что именно это значит? – lcm
Петли на дереве, создаваемом через parent_id. Вы можете сделать что-то вроде A -> B, B -> C, C -> A. (C.parent_id = B, B. Parent_id = A, A.parent_id = C) – Trompa