В последних версиях разработки нет необходимости переопределять контроллер сеансов, вместо этого вы можете просто использовать:
config.sign_out_all_scopes = false
В файле devise.rb
для получения желаемого поведения.
Вероятно, вам потребуется реализовать метод hashCode
в классе Product
.
По умолчанию реализация hashCode
возвращает местоположение объекта в памяти. Результатом метода hashCode
объекта является то, что используется HashMap
для идентификации объекта.
В этом случае каждый раз, когда Product
извлекается из базы данных с использованием db.getProduct(pid)
, его местоположение в памяти, вероятно, отличается.
Из-за этого вызов, который HashMap
использует для поиска, если существует Product
, отличается, и поэтому объект снова добавляется в HashMap
.
Чтобы избежать этого, в Product
должны быть реализованы методы hashCode
и equals
. В вашем случае использование чего-то уникального, например ProductID (pid
), имеет смысл:
// Assuming pid is public
public int hashCode() {
return this.pid;
}
public equals(Object object) {
return this.pid == ((Product)object).pid;
}
Для получения дополнительной информации о том, как реализовать более надежный hashCode
, см. https: // stackoverflow. ком / а / 113600/9129020