我正处于我的开发阶段,我认为深度(> 1)嵌套资源不值得付出努力。
我有这样的事情:
resources :first-level do
resources :comments
resources :second-level do
resources :comments
resources :first-child do
resources :comments
end
resources :second-child do
resources :comments
end
resources :third-child do
resources :comments
end
end
end
踢球者的评论是其他资源的多态性。我的目的是拥有干净的网址,如〜/ first-level / 34 / comments,〜/ first-level / 34 / second-level / 56 / third-level / comments等。
到目前为止,问题是嵌套时的多态路由只会导致悲伤。我正在关注几个Ryan Bates Railscasts作为例子。例如,如果我尝试在第一级使用polymorphic_path它工作正常,我得到:
polymorphic_path([@commentable, comments]) => ~/first-level/34/comments
但~/first-level/34/second-level/23
上的相同代码失败了:
undefined method 'second-level_comment_path' for #<#<Class:0x007fcc4acfbe58>:0x007fcc4ae73d08>
但是当我查看我的路线时,实际命名的路线是first-level_second-level_comment
。我尝试手动创建second-level_comment_path
基本上为first-level_second-level_comment
的别名,但我似乎无法做到这一点。
除非有人可以在这里指出一个明显的错误,否则我倾向于这种方法(http://weblog.jamisbuck.org/2007/2/5/nesting-resources)并且只是取消嵌套这些。我有一个面包屑风格的导航来显示层次结构,所以应该足够了,我越是看它,网址确实有点笨拙。
答案 0 :(得分:1)
使用嵌套资源时,您需要在要访问子级别时指定所有父级别。否则Rails将不知道如何达到您的孩子级别。因此,您需要使用first-level_second-level_comment并提供如下所示的第一级和第二级值:
first-level_second-level_comments_path(@my_first_level, @my_second_level)
将呈现:
~/first-level/34/second-level/23/comments
编辑:
我不明白为什么你需要逐步构建路径。
您始终可以构建first_level注释路径:
first-level_comments_path(@my_first_level)
将呈现
~/first-level/34/comments
或者列出第一级中的所有第二级:(给定第一级的第二级索引操作)
first-level_second-levels_path(@my_first_level)
将呈现
~/first-level/34/second-levels