2010-10-05 2 views
1

Я добавляю теги к нескольким моделям (сообщения, статьи, фотографии и т. Д.). Я знаю о плагинах с пометками rails, но предпочитаю не использовать их, поскольку они не вполне соответствуют моим конкретным потребностям.Добавление тегов в полиморфные модели в рельсах

Я знаю, что типичным способом реализации поддержки полиморфных тегов является использование 2 таблиц Метки, теги и настройка соответствующих has_many: через отношения.

Но, поскольку я думаю об этом немного больше - и вот мой вопрос: есть ли необходимость в таблице тегов. Существуют ли какие-либо недостатки, используя только таблицу -осна- и есть мои отношения, как это:

Post, Article, Photo 
has_many :taggings 

Taggings (attributes) 
taggable_type 
taggable_id 
tag_name 

Тогда мне просто нужно будет управлять установкой/удалением -осна- себя. В принципе, я хотел бы просто сохранить атрибут tag_name непосредственно в таблице Taggings вместо таблицы тегов.

Преимущества в том, что исключить управление таблицей, нет объединений для получения имен тегов (хотя я буду делать много ОТБОРНЫХ ОТЛИЧЕЙ).

Не могли бы вы сообщить мне свои мысли об этом дизайне?

Спасибо.

ответ

1

Эти ВЫБОРНЫЕ ОТКЛЮЧЕНИЯ будут одним из недостатков. Вы обнаружите, что это медленно, чтобы создать список тегов, а не только в случае создания индекса для ссылки (который, как я полагаю, можно обойти с помощью кэширования фрагментов), но и для автозаполнения.

Я бы сказал, что более существенным недостатком является то, что если вы используете решение для поиска в приложении (например, Xapian), вам нужно будет либо индексировать таблицу Taggings, которая может создать некоторые нечетные результаты, либо а не индексные теги вообще, что может привести к поражению точки тегов, в зависимости от того, как вы их используете.

Ничто из этого не означает, что вы абсолютно не должны этого делать, конечно; пропуская дополнительное соединение, мы сделаем некоторые вещи намного быстрее. Умный из вас, чтобы посмотреть на стоимость и решить, стоит ли это.

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