假设我有一个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 提议创建两个控制器,一个处理嵌套的 Ad,一个处理浅层的 Ad。这是有道理的,但它让我复制所有视图代码只是为了将路径助手从 更改magazine_ad_path(@magazine)
为ad_path
. 关于处理视图更改的 DRY'er 方法的任何想法?所有其他视图代码都是相同的。