2017-11-25 90 views
1

我有评论和回复。 评论的has_many回复Rails has_many错误 - 找不到ID

的routes.rb

resources :comments do 
    resources :replies 
end 

当我打开的意见/指数,然后选择的意见/节目我打印所有的,都与该评论的答复信息。

<% @comment.replies.each do |reply| %> 

我也可以创建另一个答复。所有这些正常工作。

问题出现在我决定编辑其中一个答复时。

<%= link_to 'Edit', edit_comment_reply_path(@comment.replies,reply) %> 

奇怪的是,如果有一个ID一样,我要修改的答复的ID的注释,编辑工作正常。甚至不需要我想修改的特定回复属于该评论。但如果我想编辑与ID回复例如66,但没有id为66的注释,我得到一个错误:

Couldn't find Comment with 'id'=65 
<%=form_with(model: @reply, url: [Comment.find(params[:id]), @reply]) do |form| %> 

这是篇/ _form.html.erb这显然可以作为一个编辑表单以及。在这种情况下,reply.id是65,它正在寻找具有不存在的相同ID的评论。

+0

你能把'rake routes'的输出添加到你的问题吗? – xeon131

+0

@ xeon131是的,我现在要做的 – John

回答

0

你试试?

<%= link_to 'Edit', edit_comment_reply_path(reply) %> 
+0

谢谢!这只是让我进入编辑链接。现在我有另一个问题当我点击更新。 – John

0

问题在于这行代码。

<%= link_to 'Edit', edit_comment_reply_path(@comment.replies,reply) %>

edit_comment_reply_path方法需要@comment作为它的第一个参数。

正确的代码应该是

<%= link_to 'Edit', edit_comment_reply_path(@comment, reply) %> 

前提是你已经在你的控制器edit行动分配@comment

def edit 
    @comment = Comment.find(params[:comment_id]) 
end 

或者

before_action :set_comment, only: [:create, :edit] 

的一点是,你必须设置@comment在视图的正确行动。

form_for不正确。您可以传入params[:id]这是@replyid

<%= form_with(model: @reply, url: comment_reply_path(@comment, @reply)) do |form| %> 
+0

仍然不工作..同样的错误@jackii – John

+0

显示您的控制器代码进一步调试 – jackii

+0

我刚刚添加它@jackii – John

0

你的控制器是什么样的?此外,您应该无法访问不属于您评论的回复。看看使用适当的范围和授权。我猜想它唯一的原因是运气。因为你确实有一个与reply_id匹配的comment_id,所以调用不会失败。

+0

@MichaelJamati我将编辑我的文章,并将添加回复控制器 – John

0

好的,你还可以发布你的评论控制器。 的几点: 制作使用您的相关功能的使用权的(建议;假设你使用的政策)

def edit 
    authorize @reply 
end 

如果您计划传递评论ID,你也应该set_comment(不只是在创造)。这样,您还可以确保回复编辑不会使用不属于您的用户的评论(或其他不需要的行为)执行。

此外,您质疑谈论寻找Id 66,但错误提到ID 65.这只是一个错字?

+0

我的解释只是一个例子。当我在编辑中添加set_comment时,我有另一个错误@MichaelJamati – John

0

在你RepliesController更改设置注释方法

def set_comment 
    @comment = Comment.find(reply_params[:comment_id]) 
    end 
+0

ActiveRecord :: RecordNotFound(无法找到评论与'id'=): app/controllers/respond_controller.rb:80:in'set_comment' 但我认为post_id和comment_id是重复的实例,所以它们具有相同的值@ xeon131 – John

+0

ohh ok,你可以发布你的方案吗? – xeon131

+0

我刚刚添加了它 – John