rails“未定义的方法”错误内部循环未评估

时间:2012-01-23 13:42:58

标签: ruby-on-rails ruby haml

此代码正常运行(使用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

即使数据库中没有注释(因此也不应评估循环内容)。发生了什么事?

2 个答案:

答案 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|

当我在循环下方移动该表格时,错误消失了。