2

有人可以解释一下 AR 对象的这种行为吗:

u = User.first
uu = u.dup

uu == u  #=> true
u == uu  #=> false

为什么后者不正确?

4

2 回答 2

5

这是因为如果第二个对象是新记录则ActiveRecord::Base#==返回。false既然uu.new_record?true,当做u == uu它返回false;但是u.new_record?false,因此uu == u不会通过该检查。

这种行为自 Rails 3.0 和两者以来都发生了变化u == uuuu == u并将false在 Rails 3.2(可能还有 3.1)中返回。

于 2012-04-27T00:23:54.223 回答
0

当我在Ruby 1.9.3p194and上运行它时Rails 3.2.3,我都得到了错误,所以我只能假设这是一个已修复的错误。

至于为什么会发生这种情况,我的理论是,复制的记录会记住它的来源,因此与原始记录相比,它知道返回真实。原版没有这样的信息,因此不知道如何识别它的克隆。

于 2012-04-27T00:19:00.763 回答