De acuerdo con documentos de ActiveRecord::Base:ActiveRecord igualdad de objetos
== (comparison_object) Devuelve cierto si comparison_object es el mismo objeto exacto o comparison_object es del mismo tipo y auto tiene un ID y está igual a comparison_object.id.
Tenga en cuenta que los nuevos registros son diferentes de cualquier otro registro, por definición, menos que el otro disco es el receptor sí. Además, si obtiene registros existentes con seleccionar y deja la ID, está por su cuenta, este predicado devolverá falso.
Tenga en cuenta también que la destrucción de un registro conserva su ID en la instancia de modelo , por lo que los modelos son eliminados todavía comparables.
pero mis observaciones muestran que sólo compara instaces, no identificadores de modo que estas circunstancias:
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 pregunta es se consideran 2 AR casos a ser diferentes, mientras que los documentos dicen explícitamente que esos deben ¿igualarse?
ACTUALIZACIÓN: La igualdad FUNCIONA como se esperaba. La muestra de código anterior es irrelevante. Ver mi respuesta a continuación.
Nota: La versión actual del enlace de documento anterior es en http://api.rubyonrails.org/classes/ActiveRecord/Core.html#method -i-3D-3D – DreadPirateShawn