错误(undefined method 'id' for false:FalseClass
)引用了这一行:
if current_user && current_user.admin? || current_user.id == id.to_i
为什么会产生错误?如果第一个current_user.id
条件失败,它不应该达到&&
吗?
答案 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
可能会更合适..