代码之家  ›  专栏  ›  技术社区  ›  Rob

检查current_user的快捷方式。登录?作为假?

  •  0
  • Rob  · 技术社区  · 10 年前

    我想知道是否有一条捷径可以让事情变得虚假,就像事情变得真实一样。

    current_user.logged_in == 'true'
    

    等于

    current_user.logged_in?
    

    内存中有not运算符“!”但我不确定它会如何工作。这些等同于相同吗?

    current_user.logged_in? == 'false'
    

    !current_user.logged_in?
    

    我知道我可以使用current_user。无看看他们是否已注销,但我想知道其他方法,例如。

    current_user.mod_of_game? @guide
    

    如果是mod,则返回true,但是否有快捷方式:

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

    仍在学习铁轨的来龙去脉,无法找到一个正确的答案。

    谢谢

    2 回复  |  直到 10 年前
        1
  •  3
  •   taglia    10 年前

    红宝石中的“?”character在方法名称的末尾并不表示任何特殊的意思,它只是名称的有效最后一个字符。惯例是在返回布尔值的方法末尾使用它。所以你知道 .logged_in? 将返回 true false .

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

    作为旁注, current_user.logged_in? 这是不好的,因为如果没有人登录,您将得到一个异常: current_user 将是 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? 方法有一个参数。

        2
  •  1
  •   tangrs    10 年前

    首先,你最初的陈述可能做不到你想要的。

    current_user.logged_in? == 'false'
    

    在这里 logged_in? 很可能返回一个布尔值(我假设,因为否则它会导致糟糕的设计),您将其与 'false' 它是一个字符串。这意味着它将始终计算为 false 。你的意思可能是:

    current_user.logged_in? == false
    

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

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

    这个 ! 运算符的意思是“not”,因此它会反转正在进行的表达式的值(其中它是布尔值)。

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

    if !(current_user.mod_of_game? @guide)
    

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