我一直在研究这个问题好几个小时,已经多次(从备份点)开始尝试找出问题。
我正在尝试为帖子添加评论。评论工作正常,它正在获取用户名和头像显示不起作用。这是我一步一步做的。
1)rails g model Comment body:text user:references post:references
2)我确认模型是正确的
class Comment < ApplicationRecord
belongs_to :user
belongs_to :post
end
3)rake db:migrate
4)向user.rb和post.rb
添加了has_many :comments, dependent: :destroy
5)在我的路线中添加了resources :comments
。
resources :posts do
resources :comments
member do
post '/like' => 'posts#like'
end
end
6)生成的评论控制器rails g controller comments
7)改变评论控制者的评论:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment].permit(:body))
@comment.user = current_user
if @comment.save
redirect_to post_path(@post)
else
# something else
end
end
end
8)在评论的视图文件夹中创建了两个部分“_comment.html.erb”和“_form.html.erb”。
“_ comment.html.erb”
<h2><%= @comment.user.name %></h2>
<p><%= comment.body %></p>
“_ form.html.erb”
<%= form_for([@post, @post.comments.build]) do |f| %>
<p>
<%= f.text_field :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
9)在帖子的节目页
中添加了评论<h4><%= @post.comments.count %> comments</h4>
<%= render @post.comments %>
<h2>Add a comment</h2>
<%= render "comments/form"%>
10)重启服务器
11)试图创建评论并得到以下错误:
帖子中的NoMethodError#show
未定义的方法`user'代表nil:NilClass
<h2><%= @comment.user.name %></h2> #THIS LINE IS THE ERROR
答案 0 :(得分:0)
首先,你要创建你的评论,因此只是分配用户,而且永远不会保存。将代码更改为
@comment = @post.comments.new(params[:comment].permit(:body))
@comment.user = current_user
if @comment.save
# rest of code
这样,用户在保存评论之前就会被设置。您还可以向注释模型添加验证,以确保用户在场。这样,您就无法在nil
字段中获得user_id
。
如果我们看到你的节目动作...... @comment
似乎没有被初始化,那也会有所帮助。
答案 1 :(得分:0)
错误undefined method 'user' for nil:NilClass
表示您的@comment
未初始化(@comment = nil
),当然nil
没有user
方法。也许您没有在@comment
的{{1}}行动中定义任何show
。更新您的CommentsController
操作,使其中包含show
个内容。