添加了用户关联但仍然获得“未定义的方法”

时间:2016-08-09 05:57:36

标签: ruby-on-rails ruby ruby-on-rails-3

我一直在研究这个问题好几个小时,已经多次(从备份点)开始尝试找出问题。

我正在尝试为帖子添加评论。评论工作正常,它正在获取用户名和头像显示不起作用。这是我一步一步做的。

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

2 个答案:

答案 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个内容。