在rails中编辑嵌套资源

时间:2015-05-11 04:21:20

标签: ruby-on-rails

在以下代码段

.comment
    %p= comment.comment
    %p= comment.user.email

    = link_to 'Edit', edit_post_comment_path(comment.post, comment) 
    = link_to "Delete", [comment.post, comment], method: :delete, data: {confirm: 'Are you sure"'}

为什么编辑删除都会将 comment.post 作为参数?这是什么意思?

2 个答案:

答案 0 :(得分:3)

它需要 comment.post ,因为您已经创建了嵌套路由,请检查您在其中定义路由的routes.rb文件,如下所示:

 resources :posts  do
   resources :comments
 end

您的路线是EDIT,DELETE是

edit_post_comment GET  /posts/:post_id/comments/:id/edit(.:format) comments#edit    

DELETE /posts/:post_id/comments/:id(.:format)  comments#destroy

这就是为什么你总是需要将comment.post作为参数传递。

如果您不想将comment.post作为参数,则可以将路线更改为:

resources :posts
resources :comments

如果你不喜欢,或者想要在任何特定行动中传递comment.id,请将你的路线作为

resources :posts  do
  resources :comments, :except => [:delete]
end

resources :comments, :only => [:delete]

注意:我假设您不希望comment.post参数:delete action

答案 1 :(得分:0)

Comment是一个嵌套资源,这意味着评论属于一个帖子。 因为rails路由是以 RESTFUL 方式定义的。

如果您以RESTful方式看到,评论资源中的所有CRUD操作都需要发布资源ID,因为评论与帖子相关联。

不仅“编辑”和“删除”操作需要父资源ID,所有CRUD操作都需要它。

在嵌套资源部分查看here