:comparison_objectは全く同じ オブジェクトである、又はcomparison_objectは 同じタイプのものであり、自己のIDを持っており、それがある場合ActiveRecordのオブジェクト等価
==(comparison_object)がtrueを返しcomparison_object.idと等しい
他のレコードが受信者自身 でない限り、新しいレコードは定義によって他のレコードと異なる であることに注意してください。また、 の既存のレコードを選択して取り出し、 のIDをそのまま残しておけば、あなた自身はこの 述語はfalseを返します。記録 を破壊するので、削除されたモデルは まだ匹敵する、モデル インスタンスにそのIDを保持することを
も注意してください。
しかし、私の観察は、以下に該当するように、それだけでinstacesではなく、IDを比較していることを示しています。ドキュメントは、明示的にそれらがすべきことを言っている間
a = Factory.create(:user)
b = User.find_by_email(a.email) # b is logically same as a
a.id.should == b.id # All good
a.should == b # FAILS: Contradicts the docs
a.should_not == b # Contradicts the docs
a.should_not eql b # Contradicts the docs
質問は2つのARインスタンスが異なると考えられていますさ平等ですか?
更新:等価は、期待通りに動作します。 上記のコードサンプルは無関係です。下の私の答えを見てください。
注:上記のドキュメントリンクの現在のバージョンはhttp://api.rubyonrails.org/classes/ActiveRecord/Core.html#methodであります-i-3D-3D – DreadPirateShawn