Ada*_*ner 2 ruby ruby-on-rails
error(undefined method 'id' for false:FalseClass)引用了这一行:
if current_user && current_user.admin? || current_user.id == id.to_i
Run Code Online (Sandbox Code Playgroud)
为什么这会产生错误?current_user.id如果第一个&&条件失败,它不应该达不到?
表达方式
current_user && current_user.admin? || current_user.id == id.to_i
Run Code Online (Sandbox Code Playgroud)
解析如下
(current_user && current_user.admin?) || (current_user.id == id.to_i)
Run Code Online (Sandbox Code Playgroud)
因此,当current_user为false时,评估就像是
(false && current_user.admin?) || ?
(false) || ?
(false.id == id.to_i)
# \\ KABOOM! //
Run Code Online (Sandbox Code Playgroud)
它应该用括号表示如下,其中只有当current_user不是false/nil时才调用方法.
current_user && (current_user.admin? || current_user.id == id.to_i)
Run Code Online (Sandbox Code Playgroud)
或者,考虑使用if封装逻辑的其他流控制结构和/或离散方法.
同样奇怪的是,current_user可以是false:nil当"没有当前用户"时可能更合适.