Rails中的多态路由4.1.4

时间:2014-09-04 16:21:05

标签: ruby-on-rails

我在Posts和Postables之间有多态关联,现在Projects是我唯一的Postables。在我的路线中,我有:

resources :projects do
  ...

  member do
    resources :posts
  end
end

我知道如何从参数中检索正确的ID,并且我的所有控制器规格都很好,但是当我尝试在视图中编写链接时,它们不起作用。运行rake routes,我看到一点点古怪:

...

post SHOW      /projects/:id/posts/:id(.:format)    posts#edit

...

等等。如果我没有弄错的话,路径应为' new_project_post',第一个参数应为:project_id

现在,在我的show项目视图中,我有该特定项目的帖子索引。但这些联系不起作用。让我们假设我有一个ID为2的项目,以及一个ID为1的项目的帖子。

如果我尝试link_to 'Edit', edit_post_path(@project, post),则链接会显示为.../projects/1/posts/1/edit,因此:id都会获得帖子的ID。如果我交换post@project,则:id都将成为项目的ID。

如果我尝试将它们作为数组link_to 'Edit', post_path([post, @project])传递,则生成的链接将为.../projects/1%2F2/posts/1%2F2/edit%2F是一个URL编码的斜杠字符,因此我不确定Rails在这里尝试做什么。

如果我尝试使用polymorphic_path([@project, post])作为我的链接,那么它只会吐出不存在的路径:undefined method 'project_post_path'

我尝试了其他几种参数组合而没有成功。所以,如果有人能指出我正确的方向,我将非常感激。

2 个答案:

答案 0 :(得分:1)

Rails中嵌套资源的适当语法是:

resources :projects do
  resources :posts
end

member块中,您只能声明其他操作以使用项目实例。

答案 1 :(得分:-1)

您正在member内使用嵌套资源,但这是不正确的。在此处详细了解:http://thelazylog.com/posts/polymorphic-routes-in-rails