2013-03-28 3 views
3

У меня есть приложение rails, которое включает в себя теги для сообщений в блогах, используя gem act-as-taggable-on. Моя идея - расширить механизм мечения этого драгоценного камня, используя подход с умеренной связью, где я могу выбрать создание нескольких пользователей в качестве владельцев тегов, и они могут выбрать ссылку на один тег на другой как родительский/дочерний.Как построить иерархию тегов на рельсах с помощью act-as-taggable-on

В настоящее время система имеет независимые теги, как Education, Child Education и Distance Education

Владелец Тег Education может выбрать, чтобы выбрать Child Education и Distance Education в качестве первого ребенка уровня и связать их вместе. Это отношение не будет видно до тех пор, пока оно не будет одобрено таксономистом (администратором тега).

Аналогичным образом, конечный пользователь может также предлагать тег Distance Education быть дочерним по отношению к Education, и этот запрос станет видимым администратору тега. Основываясь на его утверждении, отношения будут установлены.

Это несколько вопросов, я, относящиеся к вышеуказанному требованию: -

  1. Это рекомендуется расширенный камень или я должен использовать независимую модель мечения написанной с нуля, чтобы поддержать эту иерархическую систему?

  2. Если я продолжу схему, предоставленную драгоценным камнем, какую модель следует использовать для разработки такого требования. В частности, следует ли использовать одну таблицу с столбцом parent_id с идентификатором тега и именем тега? Или я должен поддерживать свои отношения в отдельной таблице со многими-ко-многим ассоциациям (tag_id, parent_tag_id (как внешний ключ)).

  3. Я также новичок в структурах данных, поэтому мне понадобятся некоторые исходные входы для выбора алгоритмов для эффективного перехода между семейством тегов. Использование связанного списка было одним из моих вариантов, однако, учитывая мантру Rails о конфигурации, я действительно не знаю, как это сделать.

ответ

3

Я помню, как что-то делал, как 4 года назад, с ActsAsTree.

Также есть пример того, как это сделать вручную here.

Оба варианта должны иметь этот столбец parent_id в таблице тэгов и действительно просты. Просто создайте tag.rb в папке моделей и расширьте класс Tag.

Ps. Это было долгое время, но я помню, чтобы проверить, нет ли петель, просто имейте это в виду.

+0

Спасибо Trompa. Я думаю, что этот ответ затрагивает большинство моих проблем. – ArkoD

+0

@Trompa - Нет циклов? Что именно это значит? – lcm

+0

Петли на дереве, создаваемом через parent_id. Вы можете сделать что-то вроде A -> B, B -> C, C -> A. (C.parent_id = B, B. Parent_id = A, A.parent_id = C) – Trompa

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

  • Нет связанных вопросов^_^