我在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'
我尝试了其他几种参数组合而没有成功。所以,如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:1)
Rails中嵌套资源的适当语法是:
resources :projects do
resources :posts
end
在member
块中,您只能声明其他操作以使用项目实例。
答案 1 :(得分:-1)
您正在member
内使用嵌套资源,但这是不正确的。在此处详细了解:http://thelazylog.com/posts/polymorphic-routes-in-rails