1

我有一个问题,我把这个归因于我评论模型:

class Comment < ActiveRecord::Base
  attr_accessible :comment
  belongs_to :post
  belongs_to :user

这在用户模型中

class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation
  has_many :posts
  has_many :comments

但这不起作用:

  <% post.comments.each do |comment|   %>
    <div id="comments" >
      <%= comment.user.email %>
           <%= comment.comment %>
    </div>
   <%end%>

出现错误:

undefined method `email' for nil:NilClass

请问有什么问题,在创建评论时我做出了属性,请看:

  @comment = @post.comments.create(params[:comment],:user_id => current_user.id)

我如何解决这个错误,请-

我试试这个:

@comment = Comment.new(params[:comment])
@comment.user = current_user
@comment.post = @post
@comment.save
this

@comment = @post.comments.create(params[:comment].merge(:user_id => current_user.id))

还有这个:

@comment = @post.comments.build(params[:comment])
@comment.user = current_user
@comment.save

不工作

同样的错误:

undefined method `email' for nil:NilClass
Extracted source (around line #48):

45: 
46:       <% post.comments.each do |comment|   %>
47:         <div id="comments" >
48:           <%= comment.user.email %>
49:                <%= comment.comment %>
50:         </div>
51:        <%end%>

我不知道我的模型评论有什么问题:user_id

attr_accessible :comment,:user_id,:post_id

我的表格是这样的

   <div id="comment_form_<%= post.id %>" style="display: none;" >

      <%= form_for [post,post.comments.build], :remote => true,:class=>"comment" do |com| %>
          <%= com.text_area :comment %>
          <%= com.submit "aaa" %>

      <%end %>

请帮助我,我不知道错误在哪里,数据库已正确迁移

更新:

有一个 before_filter 并且需要登录才能看到要评论的页面,所以有 current_user,我重置了 bd 并记录了新的评论,我测试了获取 comment.user_id 并获取用户的 ID,但方法是 comment.user。电子邮件不起作用,我将发布,评论模型是:

 attr_accessible :comment,:user_id,:post_id
  belongs_to :post
  belongs_to :user
  validates_presence_of :comment ,:on =>:create

模型用户是:

 class User < ActiveRecord::Base
  attr_accessible :email, :password, :password_confirmation,:username
  has_many :posts
  has_many :comments



  attr_accessor :password
  before_save :encrypt_password

  validates_confirmation_of :password
  validates_presence_of :password, :on => :create
  validates_presence_of :email
  validates_uniqueness_of :email
4

3 回答 3

1

可能使用@post而不是post在视图文件中会有所帮助吗?

于 2013-01-20T12:44:36.043 回答
0

您必须确定,在您保存评论时 current_user不为零在您列出post.comments时,没有用户没有评论。

这就是你所要做的。如果它再次不起作用 - 向我们展示动作和模型的完整源代码。

于 2013-01-06T02:25:39.507 回答
0

请检查它应该存储 user_id 的数据库注释表。如果@post.comments 的任何记录中没有 user_id,则会引发错误。可能是 user_id 列中的一个或多个记录不能为零。

采用select * from comments where user_id is null;

于 2013-01-08T11:19:22.873 回答