Реализация по умолчанию ActiveRecord hash
- это вернуть хэш идентификатора.Можно ли переопределить .hash на ActiveRecord?
Это замечательно для сохранившихся случаев. Это ужасно для неустановленных экземпляров особенно, потому что Rails по умолчанию имеет значение BasicObject.==
для экземпляров ActiveRecord без идентификаторов.
Таким образом, все несохраненные экземпляры ActiveRecord будут иметь одинаковый хеш и не будут равны. Это самый худший сценарий для работы с множеством экземпляров ActiveRecord, которые сохраняются в Set.
В моем классе User я сделал следующее. Есть ли какая-то «причина Rails», я не должен этого делать? Есть ли документация или дискуссия об этом? Все мои тесты все еще проходят.
alias_method :_old_hash, :hash
def hash
id ? _old_hash : email.hash + api_key.hash
end
Можете ли вы уточнить? Как это было исправлено? – messanjah
Я добавил важную недостающую деталь. – z5h