链接相关对象将不允许我调用它们的属性Rails

时间:2016-10-16 11:21:11

标签: ruby-on-rails ruby methods associations

我需要一些帮助。我一直在Rails中创建一个博客网站来处理一些宝石和其他技术,我遇到了一个问题。我正在将评论部分调用到我的博客节目页面中,如下所示:

show.html.slim:

- if notice != nil
p#notice.alert.alert-success role='alert' = notice

h1 Blog Post

h4 Title: #{@blog_post.title}

h4 Author: #{@blog_post.user.name}

h4 Entry:
p = @blog_post.blog_entry

= render partial: 'comments/form', locals: { comment: @comment }

.panel.panel-default
  .panel-heading
    h4 Comments
  #js-comments.panel-body
    = render partial: 'comments/comment', collection: @blog_post.comments

= link_to 'Feed', blog_posts_path, class: 'btn btn-primary'

问题出在评论/评论部分:

.panel-body
  p
    strong
      = comment.user.username
    |  said at 
    span.posted-at
      = comment.created_at.strftime('%m/%d/%Y %H:%M:%S')
    | : 
  p = comment.comment_entry
  - if policy(comment).update?
    = link_to 'Edit Comment', edit_blog_post_comment_path(comment.blog_post, comment), class: 'btn btn-primary'
  - if policy(comment).destroy?
    = link_to 'Destroy Comment', [comment.blog_post, comment], method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-primary'

现在,当我调用comment.user.username或comment.created_at.strftime时,我收到NoMethodError消息,指出username和strftime是未定义的方法。但是,如果我调用comment.user和comment.created_at,它就可以了。出于某种原因,它不会让我在链中添加额外的方法。我可以验证用户,blog_post和评论之间是否存在所有正确的关联。

以防万一,这是我的博客控制器显示页面:

def show
  @comment = @blog_post.comments.new
end

非常感谢任何帮助。谢谢!

编辑:

错误消息是:

undefined method `username' for nil:NilClass

和better_errors告诉我问题在于

部分的评论
comment.user.username

并在显示页面上调用部分

= render partial: 'comments/comment', collection: @blog_post.comments

谢谢!

1 个答案:

答案 0 :(得分:0)

控制器中初始化的注释已添加到@ blog_post.comments,但它没有用户或created_at。只需将您的控制器更改为@comment = Comment.new

即可