Magazine
のようなモデルとAd
モデルがあるとしましょうMagazine :has_many => :ads
。ネストされたリソース ルーティングを次のように設定しました。
resources :magazines do
resources :ads, :shallow => true do
get 'search', :action => :search, :on => :collection
end
end
ここでの私の目標は、ネストされたレベルと浅いレベルの両方で、Rails リソースによって作成されたデフォルトの CRUD ルートと検索ルートにアクセスできるようにすることです。一部の広告には親の雑誌がないため、ユーザーが特定の雑誌のコンテキスト内から検索を制限したり、親の雑誌に関係なくすべての広告を検索したりできるようにしたいと考えています。つまり、次のことができるようになりたいです。
/magazines/1/ads/new
/ads/new
/magazines/1/ads/search
/ads/search
# ... all standard CRUD routes ...
私の懸念は、ビューのパス変数が のようなものに依存していることですnew_magazine_ad_path(@magazine)
。/ads/index
(新しい広告を作成するためのリンクが含まれている必要があります) のようなルートにアクセスすると、ヘルパーを誘導するインスタンスがnew_magazine_ad_path(@magazine)
なくてもヘルパーに遭遇すると壊れませんか?@magazine
PS: 通常、私はこれらすべてを自分で試して何が機能するかを確認しますが、現在、上記のセットアップで立ち往生しています-編集、削除、表示、および更新の浅いルートにしか到達できません:
/ads/:id
/ads/:id/edit
/ads/:id (put)
/ads/:id (delete)
新規またはインデックスルートなし:
/ads/index
/ads/new
アップデート
そのため、Shreyas は 2 つのコントローラーを作成することを提案しました。1 つはネストされた Ad を処理し、もう 1 つは浅い Ad を処理します。これは理にかなっていますが、パス ヘルパーを から に変更するためだけに、すべてのビュー コードを複製する必要がありmagazine_ad_path(@magazine)
ますad_path
。ビューの変更を処理するための DRY'er アプローチに関するアイデアはありますか? 他のすべてのビュー コードは同じです。