В соответствии с документами ActiveRecord :: Base :
== (сравнение_объекта) Возвращает истину, если объект сравнения_объекта является точно таким же точным объектом или объект сравнения_объекта того же типа иУ self есть идентификатор, и он равняется Сравнение_объекта.
Обратите внимание, что новые записи отличаются от любой другой записи по определению, если только другая запись не является самим получателем.Кроме того, если вы извлекаете существующие записи с помощью select и пропускаете идентификатор, вы сами по себе, этот предикат вернет 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отличаться, в то время как документы прямо говорят, что они должны быть равны?
ОБНОВЛЕНИЕ: Равенство РАБОТАЕТ как ожидалось . Пример кода выше не имеет значения .Смотрите мой ответ ниже.