Как лучше всего добавлять категории к сообщениям - блог Ruby on Rails - PullRequest
7 голосов
/ 14 апреля 2010

Я новичок в Ruby и Rails, так что терпите меня, пожалуйста. Я создал очень простое приложение для блога с постами и комментариями. Все отлично работает. Мой следующий вопрос о добавлении категорий. Мне интересно, как лучше всего это сделать. Поскольку я не вижу слишком далеко передо мной, когда дело доходит до Rails, я подумал, что спросить.

Для ясности хотелось бы, чтобы в одном сообщении было несколько категорий, а в категории - несколько сообщений.

Является ли лучший способ сделать это, чтобы создать таблицу «категорий», а затем использовать модели публикаций и категорий для выполнения has_many :posts, has_many :categories? Буду ли я также установить routes.rb таким образом, чтобы сообщения были включены в категории?

Или есть более простой способ, просто добавив столбец категории в существующую таблицу сообщений? (в этом случае я бы подумал, что иметь несколько категорий будет сложно).

Ответы [ 2 ]

19 голосов
/ 15 апреля 2010

Это зависит от того, сколько усилий вы готовы приложить - вы могли бы использовать плагин тегов или установить отношение has_and_belongs_to_many в моделях сообщений и категорий, но я бы порекомендовалчто-то немного другое.

Если вы создадите третью модель, «Категоризация», как своего рода «клей» между сообщениями и категориями, вы можете иметь больше контроля.Публикация has_many :categories :through => categorizations и Категория has_many :posts :through => :categorizations

Преимущество этого заключается в том, что ваши категории хранятся не в вашем коде, а в базе данных - поэтому для добавления / удаления / редактирования их не требуетсяизменить любой исходный код.То, как вы настраивали маршруты, полностью зависит от вас - вы можете /categories/:id вернуть список всех сообщений, которые относятся к этой категории, или реализовать какую-либо форму поиска, используя одну или несколько категорий в качестве параметров.

У Райана Бейтса есть превосходный скринкаст , объясняющий все это, с несколькими различными способами решения проблемы.

Я знаю, вы упомянули, что вы новичок в RoR, поэтому я прошу прощения, если этонемного сложнее для того, что вы хотите.Как я уже сказал, плагин может быть лучше для ваших нужд, но я считаю, что всегда приятно, если это возможно, кодировать его самостоятельно, с дополнительным преимуществом большей гибкости и контроля:)

8 голосов
/ 14 апреля 2010

Поскольку вы хотите, чтобы между категориями и публикациями существовало отношение «многие ко многим», я бы (и действительно) использовал плагин тегов, такой как ActsAsTaggableOn , где вы можете определить, на что ссылается «тег» и назовите это "категория". Просто и эффективно. В своей форме вы можете ограничить возможные значения «тега» с помощью белого списка (например, «кодирование», «рецепты», «отпуск») для различных категорий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...