gpt4 book ai didi

ruby-on-rails - Rails 5.2 : Difference of if current_user vs current_user. 存在吗?在 View 中

转载 作者:行者123 更新时间:2023-12-02 20:18:45 28 4
gpt4 key购买 nike

我关注this post 。在我看来:

- if current_user
- if current_user.present?
- if current_user.exists?
- if current_user.any?

我收到错误:

undefined method `exists?' for #<User:0x00007fd68f4067b8>
undefined method `any?' for #<User:0x00007fd68f4067b8>

所以只有前两个有效。为什么?性能上有什么不同吗:

- if current_user
vs
- if current_user.present?

- if current_user.name
vs
- if current_user.name.present?

最佳答案

当你调用对象的方法时,你必须知道你在做什么。

current_user.present?

在这里,您在对象 current_user 上调用了一个名为 present? 的方法。这是有效的,因为方法 present? 是在此对象上定义的。当你这样做时

current_user.exists?

您期望 current_user 响应名为 exists? 的方法。但它没有,因此错误。

您在这个问题中混淆了一些内容。

只有在确定对象响应此方法时才调用该对象的方法。

if current_userif current_user.present? 之间的区别在于隐式与显式检查对象的真实性。看,在 Ruby 中,除了 falsenil 之外的所有内容都是 true。因此,if current_user 表示如果 current_user 是除 nilfalse 之外的任何内容,则继续。您依赖于表达式求值,而在 current_user.present? 中,您显式依赖于方法调用的返回值 (present?)。

我建议你

  • 始终使用显式,因为它读起来更好;
  • 了解 Ruby 中的对象和方法。

关于ruby-on-rails - Rails 5.2 : Difference of if current_user vs current_user. 存在吗?在 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889776/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com