这是路线档案:
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]
非常感谢您的帮助!
答案 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?%>