Итак, у меня есть модель фотографий и контроллер, который обрабатывает фотографии. У меня есть две другие модели ресторана и блюда, которые я хочу, чтобы фотографии обрабатывались фотомоделью. Поэтому я создал модель фотографий, которая представляет собой полиморфную ссылку на таблицы базы данных блюд или ресторанов. Должен ли я использовать контроллер ресторана для обработки загрузки фотографий ресторана и то же самое для контроллера блюд, или я должен использовать фотоконтроллер для обработки загрузки для обоих?
Как рельсы обрабатывают многие ко многим?
Ответы (2)
Единственная причина использования полиморфных классов заключается в том, что их бизнес-логика (или что-то еще) очень похожа, единственная разница заключается в их структуре данных (которая также имеет аналогичную часть). Поэтому следует использовать либо полиморфные модели с одним контроллером, либо отдельные классы (модели) с отдельными контроллерами.
И, конечно же, вы можете использовать отдельные контроллеры для своих полиморфных моделей, но я думаю, что это выходит за рамки передового опыта.
С помощью этой схемы вы можете думать о фотографиях как о сложных атрибутах для записей «Ресторан» и «Блюдо». Так что я бы, наверное, занимался загрузкой фотографий там же, где обрабатываются другие атрибуты для ресторанов и блюд. В схеме RESTful это произойдет в действиях new/edit в restaurant_controller и блюдах_controller. Весь процесс загрузки файлов можно значительно облегчить с помощью хорошего плагина, такого как CarrierWave.