Как рельсы обрабатывают многие ко многим?

Итак, у меня есть модель фотографий и контроллер, который обрабатывает фотографии. У меня есть две другие модели ресторана и блюда, которые я хочу, чтобы фотографии обрабатывались фотомоделью. Поэтому я создал модель фотографий, которая представляет собой полиморфную ссылку на таблицы базы данных блюд или ресторанов. Должен ли я использовать контроллер ресторана для обработки загрузки фотографий ресторана и то же самое для контроллера блюд, или я должен использовать фотоконтроллер для обработки загрузки для обоих?


person Tyler    schedule 26.03.2011    source источник


Ответы (2)


Единственная причина использования полиморфных классов заключается в том, что их бизнес-логика (или что-то еще) очень похожа, единственная разница заключается в их структуре данных (которая также имеет аналогичную часть). Поэтому следует использовать либо полиморфные модели с одним контроллером, либо отдельные классы (модели) с отдельными контроллерами.

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

person fl00r    schedule 26.03.2011

С помощью этой схемы вы можете думать о фотографиях как о сложных атрибутах для записей «Ресторан» и «Блюдо». Так что я бы, наверное, занимался загрузкой фотографий там же, где обрабатываются другие атрибуты для ресторанов и блюд. В схеме RESTful это произойдет в действиях new/edit в restaurant_controller и блюдах_controller. Весь процесс загрузки файлов можно значительно облегчить с помощью хорошего плагина, такого как CarrierWave.

person Dan Fox    schedule 26.03.2011
comment
Единственная проблема с размещением его в действиях создания/редактирования заключается в том, что я хочу, чтобы пользователи имели возможность загружать несколько фотографий, а не только одну для каждого блюда/ресторана. Должен ли я просто создать новое действие под названием «Может быть, новое фото/отредактировать фото»? - person Tyler; 26.03.2011
comment
Вы можете использовать ajax, чтобы иметь более интеллектуальную форму, позволяющую добавлять несколько изображений в одно представление. Вы также можете проверить это рельсовое вещание, чтобы узнать о некоторых идеях создания сложных форм. - person Dan Fox; 27.03.2011