gpt4 book ai didi

ruby-on-rails - ruby on rails 重写等于

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:27 26 4
gpt4 key购买 nike

我有一个模型 user.rb(它是一个 ActiveRecord::Base,不确定它是否与讨论相关)

在某些 View 中,我通过以下方式比较两个用户:

<% if current_user == user %>

结果是不确定的(有时结果为真,有时为假),我不确定为什么。

如果我把它切换到

<% if current_user.id == user.id %>

它按预期工作。但是我需要处理用户可以为空的情况。

我的问题是,这是怎么回事?

为什么 user1 == user2 在这里失败了?

我应该重写 == 还是

我是否应该使用其他方法,例如 equal?、=== 或 eql?

user.rb 是一个 ActiveRecord::Base 的事实不应该意味着 == 默认情况下已经比较了 id 字段吗?

最佳答案

如果您查看 == 的源代码

      # File lib/active_record/base.rb, line 2427
2427: def ==(comparison_object)
2428: comparison_object.equal?(self) ||
2429: (comparison_object.instance_of?(self.class) &&
2430: comparison_object.id == id &&
2431: !comparison_object.new_record?)
2432: end

您可以看到当对象 ID 匹配时它应该返回 true。如果您的代码 <% if current_user == user %>对于同一个用户对象失败,您肯定遇到了一些奇怪的事情。

您可以在上下文中发布该代码片段吗?

关于ruby-on-rails - ruby on rails 重写等于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711875/

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