Link_to与三重嵌套路由

时间:2014-04-26 04:54:54

标签: ruby-on-rails

我刚刚开始学习如何编程,并且作为实践,我正在尝试整理一个类似于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;中尝试了很多不同的东西。我认为这可能是问题所在;然而,似乎没有任何作用。我已经尝试了很多其他的东西,我已经读过如何处理三重嵌套路线的链接;然而,迄今为止没有任何工作。

我在这里做错了什么?

2 个答案:

答案 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])