2

誰かが私にARオブジェクトのこの振る舞いを説明できますか?

u = User.first
uu = u.dup

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

なぜ後者は真実ではないのですか?

4

2 に答える 2

5

これは、2番目のオブジェクトが新しいレコードの場合にActiveRecord::Base#==返されるためです。falseなので、実行すると;uu.new_record?が返されます。しかし、ですので、そのチェックに失敗しません。trueu == uufalseu.new_record?falseuu == u

この動作はRails3.0とその両方から変更されておりu == uu、Rails 3.2(および場合によっては3.1)でuu == u返されます。false

于 2012-04-27T00:23:54.223 に答える
0

Ruby 1.9.3p194これをとで実行するとfalseにRails 3.2.3なるので、修正されたバグであるとしか考えられません。

そもそもなぜそれが起こったのかというと、私の理論では、複製されたレコードはそれがどこから来たのかを覚えているので、元のレコードと比較すると真に戻ることがわかっていました。オリジナルはそのような情報を持っていないので、それがクローンであることを認識する方法を知りません。

于 2012-04-27T00:19:00.763 に答える