Давайте разберем это утверждение по утверждению.
Ваш первый оператор в порядке, он инициализирует объект BCrypt::Password
и сравнивает его со строкой.BCrypt::Password
реализует оператор сравнения , который проверяет объект, в данном случае строку, на предмет временного BCrypt::Password
объекта.
Во втором своем утверждении вы, как и первое утверждение,инициализирует объект BCrypt::Password
, но не сохраняет его в переменной, и объект остается без ссылки и не используется.Результатом оператора является просто IRB, возвращающий результат .inspect
для объекта.
Наконец, третье утверждение выглядит так, как будто вы сравниваете две неравные строки, а не какой-либо объект BCrypt::Password
.
Чтобы ваше второе и третье утверждение работали вместе, вам нужно сделать следующее:
# Updated second statement
password = BCrypt::Password.new('$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q')
=> "$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q"
# Updated third statement
password == 'test1234567'
=> true
Вы можете фактически позвонить .inspect
на password
самостоятельно, и вы увидите результат, аналогичный тому, чтоIRB вернулся для второго оператора.
password.inspect
=> "\"$2a$10$Pgxl1C8Ceg5WN5FJyP4OOOI/SiRZ0oujvWEWdNg95xp2qcPn6aP2q\""