пытаются найти ответ на этот вопрос на некоторое время, решили, что стоит просить новую ...Рельсов 3 полиморфные маршрутизации
У меня есть несколько моделей, которые являются полиморфными, определяемыми как: class Transport
, class Transport::Car < Transport
, class Transport::Plane < Transport
у меня есть основание TransportController
, а затем каждый тип Transport
имеет соответствующий контроллер (все под Transport
имен), т.е. Transport::CarController
, Transport::PlaneController
.
Я хочу, чтобы выяснить, как создать маршрут для различных Transport
действий ...
- Я не знаю, априори, сколько
Transport
подклассов у меня будет (это делается в рамках инициализатор через вызов базы данных). - За каждые
Transport
есть два действия с общим контроллером, назовите их#board
и#depart
. Эти методы должны находиться внутриTransportController
, поскольку они выполняют те же действия и отображают один и тот же вид, независимо от типа транспорта. - Различные типы
Transport
могут иметь разные реализации своих действий. Например,#choose_seat
для автомобиля и плоскости различны с разными ограничениями и разными видами, но действие одинаково. - Различные типы
Transport
имеют право на уникальные действия. Например,Transport::PlaneController
должен иметь действие#landing_gear_up
, тогда как это не имеет смысла дляTransport::CarController
.
Что может понравиться файл маршрутизации, как:
# for an action landing_gear_up only inside plane
match '/transport/plane/landing_gear_up',
:controller => "Transport::PlaneController",
:action => "landing_gear_up"
# for an action on every transport type that are handled differently
match '/transport/:type/choose_seat',
:controller => "Transport::<type>Controller",
:action => "choose_seat"
# for the actions that are handled commonly across every type of transport
match '/transport/:type/board', :to => "transport#board"
match '/transport/:type/depart', :to => "transport#depart"
Я чувствую, что это должно быть возможно с «динамичных сегментов», но я не могу управлять, чтобы заставить его работать правильно. Какие-либо предложения?