所以我创建了一个博客,用户可以创建帖子,其他人可以评论该帖子。
我希望用户能够编辑评论。
到目前为止我所做的是以下内容:
我的路线是这样的:
resources :posts do
resources :comments
end
当我耙路线时,我得到了这个:
new_post_comment GET /posts/:post_id/comments/new(.:format) comments#new
edit_post_comment GET /posts/:post_id/comments/:id/edit(.:format) comments#edit
post_comment GET /posts/:post_id/comments/:id(.:format) comments#show
在我的视图文件中我使用了这显然是错误的
<%= link_to 'Edit Comment', edit_post_comment_path(@comment) %>
我的控制器是这样的:
def edit
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
end
def update
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
if @comment.update(comments_params)
redirect_to post_path(@post)
else
render 'edit'
end
end
当我尝试访问(帖子的)页面时,我收到此错误:
No route matches {:action=>"edit", :controller=>"comments", :id=>nil, :post_id=>nil, :format=>nil} missing required keys: [:post_id, :id]
这是我第一次使用嵌套路线。我阅读了一些教程,但没有任何帮助我解决这个问题。我不知道怎么能通过这些钥匙...
(如果您需要任何其他信息,请告诉我,我会提供给他们)
非常感谢任何帮助!
答案 0 :(得分:4)
您需要同时传递@post
和@comment
实例。
edit_post_comment_path(@post, @comment)
一般来说,您需要传递与路由所属资源匹配的每个实例。所以,在像
这样的单一路线中edit_post_path(@post)
你只传递帖子。在post / comment嵌套路由中,您都会传递它们。在帖子/评论/你需要传递三种资源等等。