根据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
任何人都可以解释为什么会发生这种情况。
答案 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?
返回true
或false
,分配给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>
为什么它必须有效?