Rails:路线不匹配

时间:2018-12-06 15:29:40

标签: ruby-on-rails ruby

我的代码出现此错误

enter image description here

我在show.html.haml中将此行出现此错误以进行评论

= link_to comment.user_name, user_path(comment.user_id)

在我的创建动作中,我有这个

def create
  @comment = @post.comments.new(comment_params)
  @comment.user_name = current_user.nickname
  @comment.user_id = current_user.id
  if @comment.save!
    redirect_to @post
  else
    flash.now[:danger] = "error"
  end
end

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

根据您的帖子视图,您为当前帖子构建一个空评论:

= render 'comments/form', comment: @post.comments.build

这就是为什么当您在@post.comments.each上进行迭代时,@post会有一个未保存的内置注释,没有用户。

您可以通过添加以下条件来解决此问题:

- @post.comments.each do |comment|
  - unless comment.new_record?
    .div
      %hr
       = link_to comment.user_name, user_path(comment.user_id)
       ...

或者您可以添加您的PostsController:

def show
  @comment = Comment.new
end

并将= render 'comments/form', comment: @post.comments.build更改为= render 'comments/form', comment: @comment
这样@post.comments为空,您可以对其进行迭代而不会丢失id错误。

答案 1 :(得分:0)

显示的错误missing required keys: [:id]表示user_path的参数未如我们期望的那样传递。 comment.user_id可能是nil,或者您可能必须明确指定= link_to comment.user_name, user_path(id: comment.user_id)