У меня есть контроллер статей, который в данный момент управляет всеми отношениями статей, такими как авторы, переводы, связанные статьи и т. д., в одном действии обновления.
Страница содержит кучу «Списков» с возможностями поиска и сортировки, действиями CRD, формами для создания новых и управления существующими записями ассоциации.
Всем этим управляют действия редактирования и обновления ArticleController, а также набор частичных шаблонов для каждого листинга.
Я хочу еще больше расширить функциональность, добавив дополнительные таблицы поиска для поиска записей для ассоциации. И позже я добавлю некоторые другие функции.
Мне кажется, что такой способ (все управление ассоциациями на одной странице редактирования) далеко не удобен. Так что, возможно, лучше создать несколько специальных контроллеров для каждого листинга, например:
/articles/1/edit/authors
И как должен называться этот контроллер? Должен ли он быть дочерним элементом ArticleController, PeopleController или ApplicationController?
а может все нормально и я параноик?)
UPD
Все условия MVC строго соблюдаются. Вопрос:
Хорошо ли управлять всеми отношениями в одном контроллере. Не только добавлять/удалять отношения, иногда создавать новые, например @article.authors.find_or_create_by_name(name). Отношения в представлении — это не просто теги select! Это полнофункциональные таблицы с собственными возможностями поиска, сортировки и разбиения на страницы.
Если кто-то меня не понимает, давайте спросим по-другому:
как создать «субконтроллер»: если у нас есть ArticleController и его действие редактирования. ArticleController должен управлять только полями в модели статьи. И куча субконтроллеров должна управлять отношениями.
Зачем мне это нужно? Давайте добавим AJAX на такую страницу: никаких серьезных проблем не возникает, но при каждом AJAX-вызове ArticleController.update/edit действия вызывают запрос, и это может выполнять какую-то ненужную работу, например построение отношений Arel для моделей, которые никогда не будут использоваться. Мне нравится делить работу на маленькие независимые части, а не строить один огромный Контроллер, который может все.