Как ВЫСУШИТЬ ГРУБЫЕ части моего приложения Rails?
-
20-08-2019 - |
Вопрос
Я пишу приложение, которое - как и многие существующие приложения - на 90% состоит из обычных грубых вещей и на 10% из "сока", где нам нужна сложная бизнес-логика и больше гибкости и кастомизации.
Что касается этих 90%, я старался придерживаться принципа DRY настолько, насколько мог.Пока контроллеры работают, я обнаружил, что resource_controller действительно работает, и я мог бы избавиться от всех контроллеров в этой области, заменив их универсальным.
Теперь я хотел бы знать, как добиться того же с представлениями.В этом приложении у меня есть общий макет application.html.erb, а затем у меня должен быть другой слой макета, общий для всех CRUD-представлений и, наконец, "основная" часть:
В index.html.erb все, что мне нужно, это сгенерировать простую таблицу с полями и метками, которые я указываю.
Для создания и редактирования также используется версия общей формы с указанием меток и полей (с возможностью предоставления пользовательских полей при необходимости).
Я не уверен, что мне понадобится show, но если я это сделаю, это будет то же самое, что создать и отредактировать.
Какие плагины и инструменты (или даже статьи и общий указатель) помогли бы мне в этом?
Спасибо, Фелипе.
Решение
Если вы высушили контроллеры и теперь хотите ВЫСУШИТЬ представления, один из подходов заключается в render :action => *actionname*
и сохранение содержимого пользовательского интерфейса, которое может измениться в переменные экземпляра (чтобы они были доступны в представлении) Таким образом, вы сможете повторно использовать одно и то же представление Редактировать, новое, Список или показать.Например, вы редактируете что-то, связанное с Фу тогда ваш заголовок должен гласить Editing <%= @type %>
, то же самое должны делать ваши помощники по формированию. Фу вполне мог бы тогда сменить на бар.Таким образом, вы повторно используете одно и то же представление для разных объектов (или, лучше сказать, контроллеров).Помните, что, В отличие от redirect_to
, render :action
только отображает представление и не вызывает действие контроллера того действия, которое оно пытается отобразить.
Одно можно сказать наверняка: если вы хотите что-то высушить, вам нужно стандартизировать или следовать условностям.Например, структура ваших представлений, в данном случае.
Другие советы
Ты мог бы убежать script/generate scaffold test name:string description:text valid:boolean
и посмотрите на представления, которые генерируются (и запускаются script/destroy scaffold test
чтобы удалить файлы).Это даст вам хорошее представление о стандартном способе написания 4-х представлений Rails по умолчанию.
Я бы также рекомендовал прочитать соответствующие главы в "Agile Web Development with Rails" и "The Rails Way".
Если у вас есть существующие просмотры, которые необходимо очистить, этот эпизод Railscasts великолепен: Очистка вида
Дерзкий
Похоже, только что появился новый драгоценный камень, который очень близок к вашим требованиям:
http://github.com/codez/dry_crud
Основываясь на общем суперклассе (CrudController), вы можете наследовать функциональность CRUD для ваших контроллеров различных моделей и адаптировать то, что там особенное.Скорее всего, это то, что вы уже сделали.
Новое в dry_crud заключается в том, что представления и частичные элементы также наследуются.Вы определяете общий базовый шаблон для каждого CRUD-действия, возможно, разделенный на пару частей.Благодаря предоставленным вспомогательным средствам формы и таблицы могут быть определены в общем виде путем просмотра определений столбцов текущей модели.Затем в представлениях вашей конкретной модели вы можете адаптировать только те части или представления, которые нуждаются в настройке.
Ознакомьтесь с документацией, найденной на сайте выше, и оставайтесь СУХИМИ!