实际上我是rails的新手我试图从头开始构建身份验证但是没有任何想法。所以我在互联网上阅读了一些代码,我对一个功能感到惊讶。那是什么!!意味着在这里。它首先是假的吗?它是什么以及为什么我们使用它?
def logged_in?
!!current_user
end
答案 0 :(得分:0)
我们使用double bang来获取布尔值(true / false)。这是演示:
2.1.2 :001 > my_var = "string"
=> "string"
2.1.2 :002 > !my_var
=> false
2.1.2 :003 > !!my_var
=> true
2.1.2 :005 > null_var = nil
=> nil
2.1.2 :006 > !!null_var
=> false
所以,正如你所看到的那样,如果我们想获得一个对象的相应布尔值,那么我们使用双重爆炸(!!
)。
在您的情况下,我认为current_user
可以有user
个对象或nil
值。它没有获取user
对象或nil
,而是使用!!
将其转换为相应的布尔值。
希望它有所帮助。快乐学习!
修改强>
我想补充一点,在Ruby中,以?
结尾的方法名称将返回布尔值。所以,您提到的代码我们使用!!
中的logged_in?
来返回布尔值而不是User
或NULL
类对象。
答案 1 :(得分:0)
!
表示“not”,因此!!
表示“not-not”。 !
通常被称为“爆炸”(因为“感叹号”太长,我假设)因此!!
通常被称为“双重爆炸”。另请参阅“hashbang”或“shebang”,表示#!
。
它具有将所有“truthy”*事物转换为布尔true
和所有“虚假”事物到布尔false
中的效果。
请注意,在Ruby中,与某些语言不同,“麻痹”的唯一内容是false
和nil
。 0,“”,[],{}以及任何其他非false或nil的对象,例如User对象,都是“真实的”。
*“truthy”表示它将通过“if”测试。
答案 2 :(得分:0)
你正试图做这样的事情
def logged_in?
current_user
你在这里询问它是否是当前用户
def logged_in?
!current_user
虽然你在这里问的是登录用户不是current_user。