1

在我的开发过程中,我认为深度(> 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

更重要的是评论对于其他资源是多态的。我的意图是拥有看起来干净的 URL,例如 ~/first-level/34/comments、~/first-level/34/second-level/56/third-level/comments 等。

到目前为止的问题是嵌套时的多态路由只会导致悲伤。我以几个 Ryan Bates Railscast 为例。例如,如果我尝试在第一级使用 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)并且只是取消嵌套这些。我有一个面包屑样式的导航来显示层次结构,这样就足够了,而且我越看它,网址就会变得有点笨拙。

4

1 回答 1

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
于 2012-05-31T07:04:18.160 回答