在Restful Authentication中,我发现这current_user
是相当复杂的,当@current_user
设置为 false 时,这意味着不要尝试再次查找用户(通常来自 DB),而nil
意味着没关系,可以在 DB 中再次查找:
第 8 行lib/authenticated_system.rb
def current_user
@current_user ||= (login_from_session
|| login_from_basic_auth
|| login_from_cookie) unless @current_user == false
end
复杂的事情是,如果它试图从login_from_session
等中查找数据库并且找不到它,那么分配给的最终值@current_user
是nil
,并且该方法返回nil
(这是该方法中的最后一个评估值)。除非其他地方的代码中还有另外两个地方实际上可以设置@current_user
为 false,这将触发unless
,导致整个语句返回nil
,而@current_user
保持为false
,并且方法返回nil
......
对于依赖这些错综复杂的事实的代码,我几乎说不出话来。 false
有特殊含义,nil
在代码中有特殊含义,但没有文档,没有注释,current_user
可以是nil
,而@current_user
可以继续是false
。难道它实际上是一种设计模式,所以人们对它很熟悉,很了解吗?