ActiveRecord对象的Ruby dup方法

cau*_*eld 2 activerecord ruby-on-rails ruby-on-rails-3

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

u = User.first
uu = u.dup

uu == u  #=> true
u == uu  #=> false
Run Code Online (Sandbox Code Playgroud)

为什么后者不正确?

And*_*all 5

这是因为如果第二个对象是新记录则ActiveRecord::Base#==返回false.既然uu.new_record?true,当u == uu它做回来false; 但u.new_record?false,所以uu == u不会失败,办理入住手续.

自Rails 3.0以来,这种行为已经发生了变化,u == uu并且uu == ufalse在Rails 3.2(可能还有3.1)中返回.