Selon docs de ActiveRecord::Base:ActiveRecord égalité objet
== (comparison_object) Renvoie true si comparison_object est le même objet exact ou comparison_object est du même type et auto a une carte d'identité et il est égal à comparison_object.id.
Notez que les nouveaux enregistrements sont différents de tout autre enregistrement par définition, sauf si l'autre enregistrement est le récepteur lui-même. En outre, si vous récupérez enregistrements existants avec select et laissez l'ID, vous êtes sur votre propre, ce prédicat retournera faux.
Notez également que la destruction d'un enregistrement conserve son ID dans l'instance modèle , les modèles sont donc supprimés encore comparables.
Mais mes observations montrent qu'il ne compare que instaces, non ids de sorte que suivantes sont remplies:
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
La question est sont considérés comme 2 cas AR être différent alors que les documents disent explicitement que ceux-ci devraient Être égal?
MISE À JOUR: L'égalité fonctionne comme prévu. L'exemple de code ci-dessus n'est pas pertinent. Voir ma réponse ci-dessous.
Note: La version actuelle de lien doc ci-dessus est à http://api.rubyonrails.org/classes/ActiveRecord/Core.html#method -i-3D-3D – DreadPirateShawn