0

ネストされたリソースの例を見てみましょう。モデルは次のとおりです。

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ます。titleparams[:id] = 5params[:ad_num] = 1

もちろん、次のような便利な URL ヘルパーtitle_ad_magazine(@magazine, @ad)が最も役に立ちます。

新しい Rails ルーティング DSL でそれを行うにはどうすればよいですか?

4

1 に答える 1

1

このようなパラメーターキーを使用してカスタムルートを作成できます

 get '/magazines/:id/:ad_num/title' => 'magazine#title', as: :magazine_ads_title

あなたはURLのそれらのセクションを持っていてparmams[:id]、それにparams[:ad_num]一致します

as: オプションを使用する必要はありませんが、直感的な URL ヘルパーを生成すると役立つ場合があります。

于 2013-10-24T09:44:59.113 に答える