此代码正常运行(使用HAML):
#comments
- @blog.comments.each do |comment|
.comment
.username
- if !eval("comment.user").nil?
#{comment.user.email}
.content
#{comment.content}
但是,如果我删除“eval”行,即
#comments
- @blog.comments.each do |comment|
.comment
.username
#{comment.user.email}
.content
#{comment.content}
我收到错误:
undefined method `email' for nil:NilClass
即使数据库中没有注释(因此也不应评估循环内容)。发生了什么事?
答案 0 :(得分:1)
尝试以下方法:
#comments
- @blog.comments.each do |comment|
.comment
.username
- if comment.user
= comment.user.email
.content
= comment.content
我认为问题在于你强迫ruby用#{comment.user.email}评估comment.user.email。
在控制台中尝试:
def fail(param)
if param
puts "hello #{1/0}"
end
end
fail(nil)
因为除以0而失败,但param为零。
答案 1 :(得分:1)
问题是在发布的代码之上,我有一行:
= form_for @blog.comments.build, :remote => true do |f|
当我在循环下方移动该表格时,错误消失了。