ActiveRecord对象的Ruby dup方法

时间:2012-04-27 00:06:15

标签: ruby-on-rails ruby-on-rails-3 activerecord

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

u = User.first
uu = u.dup

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

为什么后者不正确?

2 个答案:

答案 0 :(得分:5)

这是因为如果第二个对象是新记录,ActiveRecord::Base#==将返回false。由于uu.new_record?true,因此在执行u == uu时会返回false;但u.new_record?false,因此uu == u不会失败。

自Rails 3.0以来,此行为已发生变化,u == uuuu == u都将在Rails 3.2(可能还有3.1)中返回false

答案 1 :(得分:0)

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

至于为什么首先发生了它,我的理论是重复的记录会记住它来自哪里,因此知道与原始记录相比返回true。原文没有这样的信息,因此不知道如何识别它的克隆。