【发布时间】: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