没有路由匹配{:action =>“edit”,:controller =>“comments”,:id => nil,:ribbit_id =>“18”}缺少必需的键:[:id]

时间:2016-01-28 12:12:43

标签: ruby-on-rails ruby ruby-on-rails-4

这是路线档案:

resources :ribbits do
  resources :comments
end

这是comments_controller.rb 编辑操作:

def edit
  @ribbit = Ribbit.find(params[:ribbit_id])
  @comment = @ribbit.comments.find(params[:id])
  redirect_to @user unless @user == current_user
end

这就是观点:

<% @ribbit.comments.each do |comment| %>
  <div class="comment">
    <% comment_user = comment.user%>
    <img src="<%= comment_user.avatar_url unless comment_user.blank?%>">
    <%= comment.user.name if comment.user %>
    <p>
      <%= comment.body if comment %>
    </p>
    <%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) %>
  </div>
<% end %>

我收到错误:

  

没有路线匹配{:action =&gt;“edit”,:controller =&gt;“comments”,:id =&gt; nil,   :ribbit_id =&gt;“18”}缺少必需的键:[:id]

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  

没有路线匹配{:action =&gt;“edit”,:controller =&gt;“comments”,:id =&gt; nil,   :ribbit_id =&gt;“18”}缺少必需的键:[:id]

您需要更改

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit) %>

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) %>

您的route期望:id:ribbit_id 必需的密钥 。由于:id nil ,错误也是如此。

答案 1 :(得分:0)

问题出在您的Rabbit Controller Action中。

Show行动中,您要为comment创建新的rabit 此新创建的注释未保存在数据库中,因此尚未拥有ID。因此,在您的视图中,出现错误,即此评论没有任何ID。

我不知道你为什么要创建这个评论,如果你需要它,那么你应该检查Edit链接如果已创建记录则创建一个链接。因为编辑尚未创建的记录没有任何意义。

所以这会起作用

<%= link_to "Edit", edit_ribbit_comment_path(@ribbit, comment) unless comment.new_record?%>