现实世界中的歧义线示例

时间:2020-09-22 19:48:55

标签: ruby-on-rails ruby

有人可以解释这一行代码吗?

@current_user ||= super || User.find(@current_user_id)

我无法理解这里的逻辑,这取自link to github

1 个答案:

答案 0 :(得分:2)

如果||=的值为@current_user@current_user或未定义,则nil运算符将右侧表达式的结果分配给false。如果@current_user的值是真实的,则它不会评估表达式的右侧,并且生活会照常进行。

在这种情况下,如果@current_user虚假,它将首先尝试通过super在父类上调用相同的方法。如果返回nilfalse,它将调用User.find(@current_user_id)。该代码似乎是假设是否已装入@current_user_id的{​​{1}}。如果未设置@current_user ,则此时将引发@current_user_id错误。

相关问题