Равенство объектов ActiveRecord

Согласно документации ActiveRecord :: Base :

== (объект_сравнения) Возвращает истину, если объект_сравнения точно такой же объект, или объект_сравнения имеет у того же типа и у себя есть идентификатор, и это равно compare_object.id.

Обратите внимание, что новые записи отличаются из любой другой записи по определению, если другая запись не является сам ресивер. Кроме того, если вы получите существующие записи с выбором и оставить удостоверение личности, ты сам по себе, это предикат вернет false.

Обратите внимание, что уничтожение записи сохраняет свой идентификатор в модели Например, удаленные модели все еще

Но мои наблюдения показывают, что он сравнивает только экземпляры, а не идентификаторы, так что верно следующее:

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 считаются разными, в то время как в документах прямо говорится, что они должны быть равными?

] ОБНОВЛЕНИЕ: Равенство ДЕЙСТВИТЕЛЬНО работает должным образом . Пример кода выше не имеет отношения . Смотрите мой ответ ниже.

5
задан Dmytrii Nagirniak 16 March 2011 в 22:52
поделиться