为什么我看到nil:NilClass的未定义方法"注释"?我需要一些见解



我正试图让用户在用户帖子上发表评论。我有这个在show.html.erb,

<div id="comments">
    <%= render @posts.comments %>
        <h3>Add a Comment</h3>
            <%=  render "comments/form" %>          
</div>

我在我的评论中有这个_controller.rb,

class CommentsController < ApplicationController
 def new
  @post = Post.new(params[:post])
  @user = User.find(session[:user_id])
 end
 def create 
    @post = Post.find(params[:post_id])
    @comment = @post.comments.build(params[:comment])
    @comment.save
    redirect_to @post
 end
 def destroy
     @user = User.find(session[:user_id])
     @posts = Post.find(params[:post_id])
     @comment = @post.comments.find(params[:id])
     @comment.destroy
     redirect_to post_path(@post)
 end
 private
 def comment_params
   params.require(:comment).permit(:name, :text)
 end
  end

这是在我的post_controller.rb 中

class PostsController < ApplicationController
def index
    @user = User.find(session[:user_id])
    @posts = Post.all
end
def welcome
    @user = User.find(session[:user_id])
    @post = Post.find(params[:id])
    @posts = Post.order("created_at desc").limit(4).offset(1)
    @signed_in_user = session[:user_id]
end
def posts
    @user = User.find(session[:user_id]) unless session[:user_id] == nil
    @post = Post.find(params[:id])
    redirect_to login_path, notice: "You're not logged in" unless @user 
end
def new 
    @post = Post.new
    @user = User.find(session[:user_id])
end
def create 
    @user = User.find(session[:user_id])        
    @post = Post.new(post_params)
    @post.user_id = @signed_in_user
if  @post.save 
    redirect_to dashboard_path 
else
    render 'new'
end
end
def show
    @user = User.find(session[:user_id])
    @post = Post.find(params[:id])
    @posts = Post.order("created_at desc").limit(4).offset(1)
    @signed_in_user = session[:user_id]
end
def edit
    @user = User.find(session[:user_id])
    @post = Post.find(params[:id])
end 
def update
    @user = User.find(session[:user_id])
    @post = Post.find(params[:id])
    if @post.update(params[:post].permit(:body))
    redirect_to @post
    else
        render 'edit'
    end
end
def destroy
    @user = User.find(session[:user_id])
    @post = Post.find(params[:id])
    @post.user_id = @signed_in_user
    @post.destroy
    redirect_to posts_path
 end
 private
    def post_params
        params.require(:post).permit(:body)
    end
    end

这在我的_form.html.erb 中

<%= form_for([@post, @post.comments.build]) do |f| %>
    <p>
        <%= f.label :name %><br>
        <%= f.text_field :name %>
    </p>
    <p>
        <%= f.label :body %><br>
        <%= f.text_area :body %>
    </p>
    <br>
 <p>
    <%= f.submit %>
 </p>
<% end %>

编辑:这是我的路线!

 post_comments GET    /posts/:post_id/comments(.:format)  
 POST   /posts/:post_id/comments(.:format)  
 /posts/:post_id/comments/new(.:format) 
 /posts/:post_id/comments/:id/edit(.:format) 
  post_comment GET    /posts/:post_id/comments/:id(.:format)  
  PATCH  /posts/:post_id/comments/:id(.:format) 
  PUT    /posts/:post_id/comments/:id(.:format) 
  DELETE /posts/:post_id/comments/:id(.:format) 
  posts GET    /posts(.:format) posts#index
  POST   /posts(.:format)
  new_post GET    /posts/new(.:format)   posts#new
   edit_post GET    /posts/:id/edit(.:format)  posts#edit
      post GET    /posts/:id(.:format) posts#show
           PATCH  /posts/:id(.:format) posts#updat
           PUT    /posts/:id(.:format)  posts#updat

我已经查了好几个小时了,但似乎找不出来。它让我抓狂,如果我能深入了解它可能是什么,那就太好了!谢谢你提前给我的建议,这意义重大!此外,如果我需要发布更多的代码,这样你就可以看到,让我知道!我会进行编辑!

您正在对一个空/未初始化的变量调用.comments,这就是Exception告诉您的。在没有看到错误stacktrace的情况下,我的赌注转到show.html.erb上的那一行,在那里您调用render @posts.comments

根据您的控制器,将render @posts.comments移动到render @post.comments,其中应该包含一个可以访问其comments集合的Post对象。我仍然不确定为什么@postsnil,因为您正在控制器上将其初始化为ActiveRecord::Relation。。。但无论如何,您仍然希望访问该位上的Post#comments(因此是@post)。

相关内容

最新更新