Как я могу добавить «страницы» в дополнение к «тегам» с действиями как пометки

Я только последние несколько месяцев изучаю Ruby в клиентском проекте и теперь решил перенести свою устаревшую CMS на Ruby.

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

Что я надеюсь сделать, так это использовать расширенные функции act-as-taggable-on для определения другого набора «тегов», которые на самом деле являются страницами. В моем текущем приложении у меня есть таблица с именем Pages, а в сообщениях есть поле с именем PageID. Таблица Pages содержит имя страницы, а также некоторые функции конфигурации для этой страницы, такие как макет и css. Сообщения могут появляться только на той Странице, на которой они были назначены/созданы.

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

Я понимаю, как одну и ту же модель тегов можно распространить на другие контроллеры, такие как фотографии, видео и т. д., но я не уверен, как применить две разные модели тегов к одному и тому же контроллеру. Если я не использую теги для страниц, я не уверен, как определить «страницы» в контексте Ruby, поскольку мне нужно, чтобы имена страниц были динамическими для каждого пользователя. Теоретически я понимаю, как это сделать в route.rb, но застрял в том, как определить мои страницы.

Спасибо за любую помощь! Дайте мне знать, какой код файла .rb опубликовать, чтобы проиллюстрировать, что я делаю сейчас.


person Phil Graci    schedule 23.12.2013    source источник
comment
Вы уверены, что будете использовать правильный инструмент для работы? Acts-as-taggable-on отлично подходит для обработки тегов, но он не предназначен для работы с другими типами ресурсов. Какие функции действий как тегов вам нужны для страниц и чем эти функции будут лучше, чем построение модели Page?   -  person benjaminjosephw    schedule 23.12.2013
comment
На самом деле я не уверен, поэтому и спросил! Я понимаю, что использовать его для определения моих страниц было бы хаком, но не знаю, какой подход выбрать. Причина, по которой я не могу использовать обычную модель «Страница», заключается в том, что заголовок страницы изменится. Например, каждая запись в моей CMS уже является публикацией. Что мне нужно сделать, так это найти способ сделать следующее:   -  person Phil Graci    schedule 23.12.2013
comment
site.com/ABOUT/postname или site.com/BLOG/postname — имя первой страницы должно быть направлено на что-то. Насколько я понимаю, модель страницы будет жестко закодирована, так что мне нужно будет определить контроллер для каждой страницы?   -  person Phil Graci    schedule 23.12.2013


Ответы (1)


Вы можете использовать следующий подход:

Создайте два класса «Page» и «Post», которые наследуются от базового класса «UserContent». Каждый из классов «Страница» и «Блог» должен иметь собственный контроллер.

Вы можете направить к каждому из них что-то вроде:

scope '/blog' do
  resources :posts
end

scope '/about' do
  resources :posts
end

Чтобы использовать имя сообщения вместо идентификатора, я настоятельно рекомендую вам проверить stringex который позволит вам это сделать. Это потребует добавления атрибута url к вашим моделям, но я позволю вам ознакомиться с их документацией, чтобы узнать, как все это работает. Это должен быть ответ на ваш первоначальный вопрос, и он должен быть лучшим инструментом для динамических имен страниц/публикаций, чем действия как теги.

Эта настройка должна дать вам "site.com/about/page-name" для страниц и "site.com/blog/post-name" для сообщений.

person benjaminjosephw    schedule 23.12.2013
comment
Спасибо за все отзывы, сэр! вещь stringex кажется идеальной, но предложение по классам на самом деле все еще немного не так. позвольте мне быть более конкретным. CMS обрабатывает @ 100 сайтов, каждый сайт имеет 5-10 «страниц» верхнего уровня, которые могут быть изменены пользователем. Поэтому я ищу способ динамически сопоставить имя страницы с чем-то. Кажется, что stringex тоже подойдет для этого, просто не знаю, как действовать дальше. Еще раз спасибо! - person Phil Graci; 24.12.2013