一直在試圖找到一個回答這個問題了一會兒,決定這是值得一問的一個新...軌道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"
我覺得這應該是可能的「動態段」,但我不能設法得到它才能正常工作。有什麼建議麼?