ネストされたリソースの例を見てみましょう。モデルは次のとおりです。
class Magazine < ActiveRecord::Base
has_many :ads, :order => 'time_start'
end
class Ad < ActiveRecord::Base
belongs_to :magazine
end
これまでのルーティングは次のようになります。
resources :magazines do
resources :ads
end
これにより、 のような URL が自動的に生成されます/magazines/:magazine_id/ads/:id
。
ただし、URL スキームを少し変えて、より「雑誌」中心にしたいと考えています。一般的なネストされた URL スキームは次のようになります/magazines/:id/:ad_num/component
。
- ":id" は、標準で生成されたルーティング URL の ":magazine_id" であり、データベース内の雑誌オブジェクトの主キーです。
- 「:ad_num」は、特定の雑誌内の単一の広告を識別する方法ですが、データベース識別子ではなく、単一の雑誌内の広告の配列のインデックスです
- 一般的な「表示」アクション (つまり ) はありません
/magazines/:id/:ad_num
が、代わりに「広告」内に複数のコンポーネントがあり、複数の異なるアクションを使用して表示されます
まったくなくしたいのですがAdsController
、これらすべてのルートはMagazineController
代わりにさまざまなアクションをmagazines/5/1/title
指す必要がありMagazineController
ます。title
params[:id] = 5
params[:ad_num] = 1
もちろん、次のような便利な URL ヘルパーtitle_ad_magazine(@magazine, @ad)
が最も役に立ちます。
新しい Rails ルーティング DSL でそれを行うにはどうすればよいですか?