しばらくの間、この質問に対する答えを見つけようとしていましたが、新しい質問をする価値があると判断しました...
class Transport次のように定義された、ポリモーフィックな複数のモデルがありますclass Transport::Car < Transport。class Transport::Plane < Transport
baseTransportControllerがあり、すべてのタイプにTransport対応するコントローラーがあります (すべてTransport名前空間の下にあります)、Transport::CarControllerつまりTransport::PlaneController.
さまざまなアクションのルーティングを作成する方法を理解したいTransport...
- Transportサブクラスがいくつあるかは先験的にわかりません(これは、データベース呼び出しを介して初期化子の一部として行われます)。
- すべてTransportの には、 と を呼び出す 2 つの共有コントローラ アクションが#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"
これは「動的セグメント」で可能であるべきだと思いますが、うまく機能させることができません。助言がありますか?