新手问题 新手求助 view 问题

holybible_2012 · 2014年12月10日 · 最后由 jacygo 回复于 2014年12月11日 · 1853 次阅读

出错信息如下 undefined method `name' for nil:NilClass

Extracted source (around line #26):

评论

<% if [email protected]? %> <% @article.comments.each do |comment| %>

<%= link_to comment.author.name, user_path(comment.author) %>:<%= comment.content %>

<% end %> <% end %>

但是我在 model 中有写 class Comment < ActiveRecord::Base belongs_to :article belongs_to :author, class_name: "User", foreign_key: "user_id" end

`class Article < ActiveRecord::Base belongs_to :owner, class_name: "User", foreign_key: "user_id" belongs_to :sub_category has_many :comments

attr_accessor :document end`

`class User < ActiveRecord::Base has_many :articles has_many :comments

has_secure_password end` 能指点下可能出错的原因吗

comment.author 等于 nil 了 比如: 你是用current_user.coments.create吗? 检查 scheme.rb, 看看 foreign_key 是不是都是'user_id'?

嘎嘎,挺蛋疼,这样的贴没人喜欢帮你的。。。

你得学会看日志 undefined method `name' for nil:NilClass 翻译过来就是说,nil 这个类的对象没有 name 这个属性,啥,你没有创建 nil 对象?nil 无处不在。。。

比如:

<p><%= link_to comment.author.name, user_path(comment.author) %>:<%= comment.content %></p>

如果 comment.author,这里如果评论么有 author 作者,是不是 nil 呢?是 nil 了,是不是应该报错了?author 才有 name,nil 是没有 name 的。。。

另外日志有一个很重要的信息,那就是:

Extracted source (around line #26):

其实我英语很不好,3 级 B 都没过,不过看到 line,嗯,这个单词是行的意思,就是文件的行号,#26,那就是 26 行了。。。你日志提供不全,不然会把哪个文件的 26 行也显示出来的。。。。

so,所有新人,学 ruby 的第一件事,请先学会看日志解决错误 bug

bug 处理有 3 个关键 1、是错误的提示信息,请先翻译成中文,如果你英语过了 6 级,或者真的没抄答案过了 4 级。。。 2、是错误的文件信息,哪个文件,哪一行,要问别人,你把关键代码和错误提示信息发给别人就够了,关键代码最好是包含上下几行,有时候带上下文方便阅读 3、记住错误提示的关键字 undefined method `xxxx' for nil:NilClass,说明你代码有空指针,需要容错处理 syntax error,说明你的代码少了东西,比如 end 或者{}之类的 require': no such file to load -- ‘xxxx’ ,说明你的环境缺少了一些东西,大部分是缺少 gem

。。。还有很多,自己总结去吧。

经常看到很多新人一个小问题,纠结了 3、4 天,群里一直问一直问。。。 然后我告诉他,这问题应该只需要 2 分钟就能解决,用百度,关键字是什么。。。他还对我发脾气。。。

像 1 楼说的,comment.author 是 nil。当你创建新 comment 而没有指定 user 的话,render view 就会出错。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号