“和”vs“&&”铁路运营商

时间:2015-09-16 10:00:04

标签: ruby-on-rails ruby

根据this堆叠问题,

  

and&&相同,但优先级较低

我理解这一点。我相信这个问题与上述问题不重复。

执行以下代码时在我的控制器中:

user = user_email.present? && User.find_by(email: user_email)

user变量保存active record object模型的User。因此执行user.valid_password? user_password没有错误,测试成功通过。

但是当我尝试用&&替换and时,结果非常令人惊讶。

当我尝试使用以下代码时:

user = user_email.present? and User.find_by(email: user_email)

user变量保存boolean值,因此执行user.valid_password? user_password会出现以下错误:

  

未定义的方法`valid_password?'为true:TrueClass

任何人都可以解释为什么会发生这种情况。

2 个答案:

答案 0 :(得分:7)

user = user_email.present? and User.find_by(email: user_email)

被解释为:

(user = user_email.present?) and User.find_by(email: user_email)

present?返回truefalse,分配给user

答案 1 :(得分:-2)

您的用户变量具有TrueClass。 TrueClass没有“valid_password?”方法。这就是你的代码发生的原因。

<ul class="menu">
    <li class="dropdown-toggle">
        <a href="#">Toggle Dropdown</a>
        <ul class="dropdown-wrap">
            <ul class="column">
                <li><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
                <li><a href="#">Link 3</a></li>
            </ul>
            <ul class="column">
                <li><a href="#">Link 4</a></li>
                <li><a href="#">Link 5</a></li>
                <li><a href="#">Link 6</a></li>
            </ul>
        </ul>
    </li>
</ul>

为什么它必须有效?