一段时间以来一直试图找到这个问题的答案,决定值得问一个新的......
我有多个多态模型,定义如下:class Transport
, class Transport::Car < Transport
,class Transport::Plane < Transport
我有一个 base TransportController
,然后每种类型Transport
都有一个相应的控制器(都在Transport
命名空间下),即Transport::CarController
, Transport::PlaneController
。
我想弄清楚如何为不同的Transport
操作创建路由......
- 我事先不知道我将拥有多少
Transport
个子类(这是通过数据库调用作为初始化程序的一部分完成的)。 - 对于每个
Transport
,都有两个共享控制器操作,分别调用它们#board
和#depart
。这些方法应该存在于内部TransportController
,因为它们执行相同的操作并显示相同的视图,而与 Transport 的类型无关。 - 不同
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"
我觉得这应该可以通过“动态细分”实现,但我无法让它正常工作。有什么建议么?