循环对象返回nil实例?

时间:2018-10-07 19:31:05

标签: ruby-on-rails activerecord ruby-on-rails-5

我正在我的评论模型下循环显示所有帖子评论

 %h2 Comments
 - @post.comments.each do |comment|
     %p
       %strong Comment:
     = comment.text
     = link_to 'Destroy Comment', [comment.post, comment],
           method: :delete,
           data: { confirm: 'Are you sure?' }

那把我还给我 Nil comment in the end

如您所见,有一个空白对象,如果我转到rails控制台并检查发布的所有评论,它会告诉我它只有两个评论“ Comment 1”和“ comment2” 有什么想法为什么要实例化一个nil对象并将其显示为存在? 这是我的评论控制器创建动作

def create
  @post = Post.find_by slug: params[:post_slug]
  @comment = @post.comments.create(comment_params)
  @comment.user_id = current_user.id
  if @comment.save
    redirect_to post_path(@post)
  else
    flash.now[:danger] = 'Error'
  end
end

如果该帖子没有评论,则不会显示任何零评论,如果我在该帖子中有评论,就会发生这种情况 显示PostController的动作

 def show
  @post = Post.find_by slug: params[:slug]
  redirect_to posts_path unless @post.present?
  @post.update_visit_count if @post.present?
 end

2 个答案:

答案 0 :(得分:0)

我认为您错过了要点,每个帖子都有评论,因此首先要嵌套每个循环,例如 @posts.each do |post| post.each do |comment| .... end end

答案 1 :(得分:0)

它看起来像模板问题。在HAML中,缩进很重要。循环内容应比循环命令多缩进2个空格。但是在您看来,%p行相对于前一行偏移了4个字符,而不是应该偏移的2个字符。

您可以用以下代码替换该模板代码吗?

%h2 Comments
- @post.comments.each do |comment|
  %p
    %strong Comment:
  = comment.text
  = link_to 'Destroy Comment', [comment.post, comment], method: :delete, data: { confirm: 'Are you sure?' }

然后重试?