undefined方法`id'表示false:FalseClass

时间:2014-06-20 04:56:59

标签: ruby-on-rails ruby

错误(undefined method 'id' for false:FalseClass)引用了这一行:

if current_user && current_user.admin? || current_user.id == id.to_i

为什么会产生错误?如果第一个current_user.id条件失败,它不应该达到&&吗?

1 个答案:

答案 0 :(得分:7)

表达式

current_user && current_user.admin? || current_user.id == id.to_i

解析为以下

(current_user && current_user.admin?) || (current_user.id == id.to_i)

因此,当current_user为false时,评估类似于

(false && current_user.admin?) || ?
(false)                        || ?
                                  (false.id == id.to_i)
                               # \\ KABOOM! //

它应该用括号表示如下,其中只有当current_user不是false / nil时才调用方法。

current_user && (current_user.admin? || current_user.id == id.to_i)

或者,考虑使用其他流控制结构,如if和/或封装逻辑的离散方法。


current_user可以是false也很奇怪:当“没有当前用户”时,nil可能会更合适..