#ruby-on-rails-3 #architecture
#ruby-on-rails-3 #архитектура
Вопрос:
Владелец сайта, над которым я работаю, попросил меня сделать страницу «О нас» редактируемой (ею, через веб-интерфейс). На самом деле, всего 5 страниц, которые она хочет сделать редактируемыми — о нас, Условиях обслуживания и так далее.
В старой реализации, когда эти страницы были статическими файлами просмотра, у меня были все URL-адреса, закодированные в routes.rb
scope :controller => :home do
get :about
get :terms
# etc ...
end
Теперь, когда эти разные действия извлекают данные из базы данных (или где бы то ни было), кажется, что стандартный подход RESTful может заключаться в создании Pages
ресурса и объединении всех представлений в show
действие.
Это не совсем правильно. Отдельные ресурсы обычно не встроены в сайт так, как страница «О нас» — содержимое страницы может измениться, но сама страница никуда не денется, и ссылки на нее есть в нижнем колонтитуле, в некоторых наших электронных письмах и т. Д.
В частности, выделение отдельных маршрутов из PagesController может вызвать следующие проблемы:
- Я не мог использовать именованные помощники маршрута, такие как
about_path
- Маршруты для постоянных страниц на сайте будут храниться в базе данных, что означает, что…
- обслуживание, вероятно, будет головной болью, поскольку это не обычное место для хранения маршрутов.
Поэтому в настоящее время я думаю, что лучший подход — оставить эти URL-адреса закодированными routes.rb
и иметь отдельные действия контроллера, каждое из которых будет извлекать свою собственную страницу из БД.
Кто-нибудь может поделиться некоторыми соображениями? Как вы справляетесь с данными, которые не являются полностью статичными, но все же должны быть жестко подключены к сайту?
Комментарии:
1. Вы позволите им включать HTML-теги в свои отправленные файлы или просто текст? Как насчет связанных изображений или других ресурсов?
2. @Perry — Мы собирались использовать Markdown для текста. Итак, да для HTML-тегов, нет для изображений.
Ответ №1:
Если вы собираетесь разрешить markdown, мне нравится идея контроллера страниц и модели. Если вам кажется, что все 5 страниц должны выглядеть одинаково, я бы выбрал один шаблон, который заполняется пользовательским контентом и соответствующей навигацией.
Моим выбором было бы задать маршруты, создать представления (включая маршрутизацию) и заполнить представления с помощью созданной пользователем уценки.
Трудно сказать, не зная больше о вашем сайте, но я предпочитаю не разрешать пользователям создавать страницы, отражающие идентификатор сайта (информация, условия и т. Д.), Если только это не то, за что они платят.
Комментарии:
1. Да, это то, что я в итоге сделал. У меня есть контроллер страниц и один
show
шаблон, который отображает все страницы, но все маршруты для страниц перечислены по отдельностиroutes.rb
, а вcreate
контроллере нет действий, поэтому пользователи не могут добавлять новые страницы.