有人可以解释一下AR对象的这种行为:
u = User.first
uu = u.dup
uu == u #=> true
u == uu #=> false
为什么后者不正确?
答案 0 :(得分:5)
这是因为如果第二个对象是新记录,ActiveRecord::Base#==
将返回false
。由于uu.new_record?
为true
,因此在执行u == uu
时会返回false
;但u.new_record?
为false
,因此uu == u
不会失败。
自Rails 3.0以来,此行为已发生变化,u == uu
和uu == u
都将在Rails 3.2(可能还有3.1)中返回false
。
答案 1 :(得分:0)
当我在Ruby 1.9.3p194
和Rails 3.2.3
上运行时,我得到了错误,所以我只能假设它是一个修复过的错误。
至于为什么首先发生了它,我的理论是重复的记录会记住它来自哪里,因此知道与原始记录相比返回true。原文没有这样的信息,因此不知道如何识别它的克隆。