我刚刚开始学习如何编程,并且作为实践,我正在尝试整理一个类似于facebook的通用程序。但是,当我输入下面提供的代码时,我不断收到以下错误:
没有路由匹配{:action =>" new",:controller =>" comments",:post_id => nil,:user_id =>&#34 ; 4"}缺少必需的密钥:[:post_id]
路线
resources :users do
resources :posts do
resources :comments
end
end
查看
<% @user.posts.each do |p| %>
<ul><b><%= p.id%></b></ul>
<ul><b><%= p.post%></b></ul>
<ul><em><%= p.created_at%></em></ul>
<ul><%= link_to "Delete Post", [p.user, p], method: :delete %> </ul>
<ul><%= link_to "Comment", new_user_post_comment_path(@user, p.id) %> </ul>
<%end%>
控制器
def show
@user = User.find(params[:user_id])
@post = Post.find(params[:post_id)]
@comment = Comment.find(params[:id])
redirect_to user_path(@user)
end
我在&#34; p.id&#34;中尝试了很多不同的东西。我认为这可能是问题所在;然而,似乎没有任何作用。我已经尝试了很多其他的东西,我已经读过如何处理三重嵌套路线的链接;然而,迄今为止没有任何工作。
我在这里做错了什么?
答案 0 :(得分:1)
我想,在所有用户的评论中,post_id = nil
都有评论。检查所有@user.comments
是否有post_id
答案 1 :(得分:0)
您的错误是:
没有路线匹配{:action =&gt;&#34; new&#34;,:controller =&gt;&#34; comments&#34;, :post_id =&gt; nil,:user_id =&gt;&#34; 4&#34;}缺少必需的键:[:post_id]
错误意味着您没有发送嵌套路由所需的post_id
参数。 嵌套路由的重点是,您可以获得parent
资源的各种资源。这意味着您无法在未指定父资源的情况下找到子资源
要解决此问题,我建议如下:
<%= link_to "Delete Post", user_post_path(p.user, p), method: :delete %>
<%= link_to "Comment", new_user_post_comment_path(@user, p) %>
棘手的部分是我不知道哪些链接导致错误
您的控制器中也有拼写错误:Post.find(params[:post_id])