检查current_user.logged_in的快捷方式?是假的?

时间:2016-01-11 04:13:40

标签: ruby-on-rails ruby-on-rails-4

我想知道是否存在虚假事物的捷径,例如事情是真的,例如。

current_user.logged_in == 'true'

等于

current_user.logged_in?

从内存中有not运算符'!'但我不知道它会如何工作。这些等同于一样吗?

current_user.logged_in? == 'false'

!current_user.logged_in?

我知道我可以使用current_user.nil吗?看看他们是否已经退出但我想知道其他方法,例如

current_user.mod_of_game? @guide

返回true是一个mod但是有以下快捷方式:

if (current_user.mod_of_game? @guide) == 'false'

仍在学习rails和cant的来龙去脉,真的找到一个错误的快捷方式的好答案。

由于

2 个答案:

答案 0 :(得分:3)

红宝石'?'在方法名称的末尾,字符并不意味着什么特殊,它只是名称的有效最后一个字符。通常在返回布尔值的方法结束时使用它。因此,您知道.logged_in?将返回truefalse

'!'字符是逻辑否定,所以true == !false。在这种情况下,!user.logged_in?字面意思是“NOT user.logged_in?”,因此如果用户未登录,则整个语句将为true。 '!'的行为顺便说一句,大多数编程语言都是一样的。

作为旁注,current_user.logged_in?并不好,因为如果没有人登录,您将获得例外:current_user将是nil,而nil则不会有一个名为.logged_in?的方法。正确的方法是在指出时使用current_user.nil?!current_user.nil?

if (current_user.mod_of_game? @guide) == false的快捷方式为if !current_user.mod_of_game?(@guide)。假设您的.mod_of_game?方法有一个参数。

答案 1 :(得分:1)

首先,你原来的陈述可能并不是你想要的。

current_user.logged_in? == 'false'

在这里,logged_in?可能会返回一个布尔值(我假设它因为设计效果很差),并且你将它与'false'(一个字符串)进行比较。这意味着它将始终评估为false。您可能意味着以下内容:

current_user.logged_in? == false

在这种情况下,以下陈述完全等同:

current_user.logged_in? == false
!current_user.logged_in?

!运营商意味着'不是'所以它反转了前进表达式的值(它是一个布尔值)。

然后,您的最后一个表达式可以简化为:

if !(current_user.mod_of_game? @guide)

因为它接受方法调用mod_of_game?的值并将其反转。