在以下代码段
中.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 作为参数?这是什么意思?
答案 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。