Secondo documenti di ActiveRecord::Base:ActiveRecord uguaglianza oggetto
== (comparison_object) restituisce true se comparison_object è lo stesso oggetto esatto , o comparison_object è dello stesso tipo e l'auto ha un ID ed è uguale a comparison_object.id.
Nota che i nuovi record sono diversi da qualsiasi altro disco per definizione, a meno che il documento è il ricevitore stesso. Inoltre, se si prelevano i record esistenti con con select e si lascia l'ID, si è da soli, questo predicato restituirà false.
Si noti inoltre che distruggere un record conserva la sua ID nel caso del modello , modelli in modo eliminati sono ancora comparabili.
Ma le mie osservazioni mostrano che mette a confronto solo instaces, non ids modo che segue sono vere:
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 questione è di 2 AR casi sono considerati diversi, mentre i documenti esplicitamente dicono che coloro che dovrebbero essere uguale?
UPDATE: L'uguaglianza FUNZIONA come previsto. Il codice sopra riportato non è pertinente. Vedi la mia risposta qui sotto.
Nota: La versione attuale del collegamento doc sopra è a http://api.rubyonrails.org/classes/ActiveRecord/Core.html#method -i-3D-3D – DreadPirateShawn