【问题标题】:Chaining associated objects won't allow me to call their attributes Rails链接关联对象不允许我调用它们的属性 Rails
【发布时间】:2017-02-25 10:48:40
【问题描述】:

我需要一些帮助。我一直在 Rails 中创建一个博客站点来研究一些 gems 和其他技术,但我遇到了一个问题。我将评论部分调用到我的博客显示页面中,如下所示:

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'

问题出在 cmets/comment 部分:

.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 和 cmets 之间是否存在所有正确的关联。

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

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

谢谢!

【问题讨论】:

  • 您是否尝试过检查部分变量comment
  • 此外,您没有调用属性-您正在调用链式方法-其中一些恰好是属性的获取器。但这是一个非常重要的区别。
  • 我有,如果我从方法链中删除用户名和 strftime,它确实有效,这对我来说似乎很奇怪。
  • 你能发布错误和堆栈跟踪吗?
  • 我刚刚将它作为编辑发布在原始帖子中。希望对大家有所帮助

标签: ruby-on-rails ruby methods associations


【解决方案1】:

在控制器中初始化的评论被添加到@blog_post.cmets,但它没有用户或created_at。只需将您的控制器更改为@comment = Comment.new

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多