【发布时间】:2012-06-11 09:47:10
【问题描述】:
一段时间以来一直在努力寻找这个问题的答案,觉得值得提出一个新问题...
我有多个多态模型,定义如下:class Transport、class Transport::Car < Transport、class Transport::Plane < Transport
我有一个基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"
我觉得这应该可以通过“动态细分”实现,但我无法让它正常工作。有什么建议吗?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 model-view-controller polymorphism rails-routing