Jun*_*say 2 ruby-on-rails rails-activerecord
我关注这个帖子。在我看来:
- if current_user
- if current_user.present?
- if current_user.exists?
- if current_user.any?
Run Code Online (Sandbox Code Playgroud)
我收到错误:
undefined method `exists?' for #<User:0x00007fd68f4067b8>
undefined method `any?' for #<User:0x00007fd68f4067b8>
Run Code Online (Sandbox Code Playgroud)
所以只有前 2 个工作。为什么?性能是否有任何差异:
- if current_user
vs
- if current_user.present?
Run Code Online (Sandbox Code Playgroud)
和
- if current_user.name
vs
- if current_user.name.present?
Run Code Online (Sandbox Code Playgroud)
当你在对象上调用方法时,你必须知道你在做什么。
current_user.present?
Run Code Online (Sandbox Code Playgroud)
在这里,您调用了一个present?在对象上调用的方法current_user。这是有效的,因为方法present?是在这个对象上定义的。当你做
current_user.exists?
Run Code Online (Sandbox Code Playgroud)
您希望current_user响应名为 的方法exists?。但它没有,因此错误。
你在这个问题中混淆了几件事。
仅当您确定对象响应此方法时才调用该对象的方法。
if current_uservs之间的区别if current_user.present?是隐式与显式检查对象真实性。看,在 Ruby 中,除了falseand之外的一切nil都是真的。所以if current_user意味着 ifcurrent_user是除了nilor之外的任何东西,false然后继续。您依赖于表达式评估,而current_user.present?您显式地依赖于方法调用 ( present?)的返回值。
我建议你
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |